最近、WKWebView
についての記事が多いですが…ここしばらく、Swift 開発で使っているのでしょうがない。
ということで、今回は WKWebView で JavaScript の alert()
を表示する方法についてです。
参考にさせていただいた記事はこちらから。
Swift版 WKWebViewでJavaScript(Alert,Confirm,Prompt)の処理 – Qiita
https://qiita.com/furu8ma/items/183f85a106ba827ad0ea
さて、サンプルコードは下記の通りです。
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "OK", style: .default) { action in completionHandler() } alertController.addAction(okAction) present(alertController, animated: true, completion: nil) }
Web 側で alert が表示されるタイミングで、上記が実行されます。
やっていることとしては、JavaScript で表示しようとしている alert のメッセージを取得し、それを UIAlertController
を使って表示しているだけです。
そして、UIAlertView の OK ボタンがタップした時に、completionHandler
を実行します。
なお、この completionHandler
を実行しないと、アプリがクラッシュするのでご注意ください。
実際、私が最初にこの関数を追加して動作確認をした際に、変数 message を表示するだけの処理を書いたところ、message は正しく取得できましたが、その後クラッシュしました。
その時のエラーメッセージがこちらです。
Completion handler passed to -[[コントローラー名] webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:] was not called
completionHandler が呼ばれていない!という内容です。
最初は、サンプルコードをそのままコピー&ペーストして、動作確認をした方がよさそうです。
上記を注意して関数を追加したあと、実機で実行してみると、本来は JavaScript の alert が表示されるタイミングで、UIAlertController が表示されました!
アプリもクラッシュしなくなったので、これで OK です。
以上、Swift の WKWebView で JavaScript の alert() を表示する方法でした。
ご参考になれば幸いです。