Swift webview:如何从javascript正确调用swift代码?

前端之家收集整理的这篇文章主要介绍了Swift webview:如何从javascript正确调用swift代码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让我的 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!
}

猜你在找的Swift相关文章