I am trying to understand the best way to execute javascript with WKWebview
Could someone please give me the use cases / best practices when using WKWebView.
When to use addUserScript and WKScriptMessageHandler and when to use 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)")
}
}
Found a nice explanation
http://jonathanblog2000.blogspot.co.il/2016/11/understanding-ios-wkwebview.html
2.3.2 Inject javascript from native code to js DOM emphasized text WKUserContentController allows add (and remove) a WKUserScript to be injected either when the DOM tree starts to load or finishes to load. On the contrary, evaluateJavaScript allows application to execute a javascript snippet on demand at any time.
In my experience, WKUserScript seems to have more privileges, eg: document.cookie="test=test" works with WKUserScript but not with evaluateJavaScript.
However, WKUserScript requires an additional reload() for the javascript you injected to run. It maybe a bug. Sometimes it complicates the code.
WKScriptMessageHandler is a separate thing. It allows your native app to receive messages from javascript. eg, you can add a handler and receives message that is posted from javascript like: "window.webkit.messageHandlers.notification.postMessage({body: "..."});" Refer: http://nshipster.com/wkwebkit/
Pretty cool stuff that doesn't exist in UIWebView
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With