web-dev-qa-db-ja.com

WKWebViewでのJavaScriptイベントの処理

onClickのすべてのWKWebViewイベントをキャッチしようとしています。このWebサイトはJavaScriptでのみ動作しているため、次のものでは何も処理できません。

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

これどうやってするの?

10
Alex Crow

wKUserScriptを使用して、WKWebViewの構成のuserContentControllerに追加できます。

    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)

これによりスクリプトが作成され、ドキュメントの読み込みが完了したときにページに挿入されます。ここで、メッセージを受信するためにWKScriptMessageHandlerプロトコルを実装する必要があります。

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

WebViewJavascriptBridgeを使用できます。詳細については、以下のリンクを参照してください。

https://github.com/marcuswestin/WebViewJavascriptBridge

0
Rahul Kasar