2017-07-12 8 views
3

Ich versuche, alle onClick Ereignis in WKWebView zu fangen. Die Website arbeitet nur mit JavaScript, damit ich nicht alles behandelt in:JavaScript-Ereignisse in WKWebView behandeln

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) 

Wie kann ich das tun?

Antwort

4

Sie können ein WKUserScript verwenden und es dem userContentController der WKWebView-Konfiguration hinzufügen.

let config = WKWebViewConfiguration() 
    let source = "document.addEventListener('click', function(){ window.webkit.messageHandlers.iosListener.postMessage('click clack!'); })" 
    let script = WKUserScript(source: source, injectionTime: .atDocumentEnd, forMainFrameOnly: false) 
    config.userContentController.addUserScript(script) 
    config.userContentController.add(self, name: "iosListener") 
    webView = WKWebView(frame: UIScreen.main.bounds, configuration: config) 

dies wird das Skript machen und es in der Seite injizieren, wenn das Dokument vollständig geladen ist. Nun müssen Sie das WKScriptMessageHandler Protokoll implementieren, um die Nachricht zu empfangen:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { 
     print("message: \(message.body)") 
     // and whatever other actions you want to take 
    } 
+0

Es funktioniert !!! Thnx !!!! –