J'essaye d'attraper chaque événement onClick dans WKWebView. Le site Web fonctionne uniquement avec JavaScript, je ne peux donc rien gérer dans:

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

Comment puis-je faire ceci?

15
Alex Crow 12 juil. 2017 à 19:16

2 réponses

Meilleure réponse

Vous pouvez utiliser un WKUserScript et l'ajouter au userContentController de la configuration de WKWebView.

    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)

Cela créera le script et l'injectera dans la page une fois le chargement du document terminé. Maintenant, vous devez implémenter le protocole WKScriptMessageHandler pour recevoir le message:

    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        print("message: \(message.body)")
        // and whatever other actions you want to take
    }
25
ɯɐɹʞ 16 juil. 2017 à 00:00

Vous pouvez utiliser WebViewJavascriptBridge. Veuillez consulter le lien ci-dessous pour plus de détails:

https://github.com/marcuswestin/WebViewJavascriptBridge

-1
Rahul Kasar 12 juil. 2017 à 16:42