onClick
のすべてのWKWebView
イベントをキャッチしようとしています。このWebサイトはJavaScriptでのみ動作しているため、次のものでは何も処理できません。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
これどうやってするの?
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
}
WebViewJavascriptBridgeを使用できます。詳細については、以下のリンクを参照してください。