WKWebView中的Javascript - evaluateJavaScript vs addUserScript

时间:2017-01-05 15:13:48

标签: javascript ios swift wkwebview

我正在尝试了解使用WKWebview执行javascript的最佳方法

有人可以在使用WKWebView时向我提供用例/最佳实践。

何时使用 addUserScript WKScriptMessageHandler 以及何时使用 evaluateJavaScript

    let jscript = "my script"
    let userScript = WKUserScript(source: jscript, injectionTime: .atDocumentEnd, forMainFrameOnly: true)
    let userContentController = WKUserContentController()
    userContentController.addUserScript(userScript)

    let webViewConfiguration = WKWebViewConfiguration()
    webViewConfiguration.userContentController = userContentController
    webView = WKWebView(frame: self.view.bounds, configuration: webViewConfiguration)

VS

let myScript
self.wkWebView.evaluateJavaScript(script) { (result, error) in
    if error != nil {
        print("\(error)")
    }
}

2 个答案:

答案 0 :(得分:4)

找到一个很好的解释

http://jonathanblog2000.blogspot.co.il/2016/11/understanding-ios-wkwebview.html

2.3.2将javascript从本机代码注入js DOM 强调文字 WKUserContentController允许在DOM树开始加载或完成加载时添加(和删除)要注入的WKUserScript。相反,evaluateJavaScript允许应用程序在 任何 时按需执行javascript代码段。

答案 1 :(得分:2)

根据我的经验,WKUserScript似乎有更多特权,例如: 的document.cookie ="测试测试="适用于WKUserScript但不适用于evaluateJavaScript。

但是,WKUserScript需要为您注入的javascript运行额外的reload()。这可能是一个错误。有时它会使代码复杂化。

WKScriptMessageHandler是一个单独的东西。它允许您的本机应用程序从JavaScript接收消息。例如,你可以添加一个处理程序并接收从javascript发布的消息,例如:" window.webkit.messageHandlers.notification.postMessage({body:" ..."});&# 34; 请参阅:http://nshipster.com/wkwebkit/

UIWebView中不存在的非常酷的东西