【Swift】WKWebViewでJavaScriptのalertを表示する方法

最近、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() を表示する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG