WKWebView中的Javascript – evaluateJavaScript vs addUserScript

我试图了解使用WKWebview执行javascript的最佳方法

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

何时使用addUserScriptWKScriptMessageHandler以及何时使用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)") } } 

根据我的经验,WKUserScript似乎有更多权限,例如:document.cookie =“test = test”适用于WKUserScript,但不适用于evaluateJavaScript。

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

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

很酷的东西,在UIWebView中不存在

找到一个很好的解释

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

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