我试图让我的
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!
- }