我试图让我的
JavaScript与swift代码交互,但不幸的是我没有成功.
目前,我只是尝试更改标题颜色并显示一条消息,就像您将在下面的代码中看到的.
这是我的(index.html)代码:
<!DOCTYPE html> <html> <head> <title>Test</title> <Meta charset="UTF-8"> </head> <body> <h1>WebView Test</h1> <script type="text/javascript" src="main.js"></script> </body> </html>
这是我的(main.js -JavaScript)代码:
function callNativeApp () { try { webkit.messageHandlers.callbackHandler.postMessage("Send from JavaScript"); } catch(err) { console.log('error'); } } setTimeout(function () { callNativeApp(); },5000); function redHeader() { document.querySelector('h1').style.color = "red"; }
这是我的(ViewController.swift)代码:
import UIKit import WebKit class ViewController: UIViewController,WKScriptMessageHandler { @IBOutlet var containerView : UIView! = nil var webView: WKWebView? override func loadView() { super.loadView() var contentController = WKUserContentController(); var userScript = WKUserScript( source: "redHeader()",injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,forMainFrameOnly: true ) contentController.addUserScript(userScript) contentController.addScriptMessageHandler( self,name: "callbackHandler" ) var config = WKWebViewConfiguration() config.userContentController = contentController self.webView = WKWebView() self.view = self.webView! } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view,typically from a nib. var url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("index",ofType: "html")!) var req = NSURLRequest(URL: url) self.webView!.loadRequest(req) } func userContentController(userContentController: WKUserContentController!,didReceiveScriptMessage message: WKScriptMessage!) { if(message.name == "callbackHandler") { println("JavaScript is sending a message \(message.body)") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
您正确设置了所有设置,但是您没有将WKWebViewConfiguration实例提供给WKWebView.由于配置有Javascript / Swift桥梁的细节,您不能来回说话.
override func loadView() { // ... var config = WKWebViewConfiguration() config.userContentController = contentController self.webView = WKWebView(frame: self.view.frame,configuration: config) self.view = self.webView! }