首页 > 解决方案 > Swift receiving javascript messages don't work

问题描述

I need that javascript send a message for swift but don't work.

The Swift Code:

class FirstViewController: UIViewController, WKUIDelegate, WKScriptMessageHandler {

@IBOutlet weak var webview: WKWebView!

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
     print( "Enter here" )

    if message.name == "jsHandler" {
        print( message.body );
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    let htmlPath = Bundle.main.path(forResource: "index", ofType: "html", inDirectory: "web")
    let url = URL(fileURLWithPath: htmlPath!)
    let request = URLRequest(url: url)

    let user = WKUserContentController()
    user.add(self, name: "jsHandler")
    webview.configuration.userContentController = user

    webview.uiDelegate = self
    webview.navigationDelegate = self
    webview.load(request)
}

The javascript code:

$(document).on( 'click', '.element', function() {
    window.webkit.messageHandlers.jsHandler.postMessage( "Invoke swift" );
} );

Is something wrong or something missing?

标签: javascriptiosswift

解决方案


如果您在 webview.load(request) 之前使用仅在 viewDidLoad 中设置的 Storyboard

//webview is your @IBOutlet
webview.configuration.userContentController.add(self, name: "yourHandler")
webview.configuration.preferences.javaScriptEnabled = true

推荐阅读