26
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebViewClientのonReceivedError(WebView view, WebResourceRequest request, WebResourceError error) の注意点

Last updated at Posted at 2016-12-08

概要

webviewの通信エラーを通知してくれる、WebViewClientの [onReceivedError(android.webkit.WebView, int, java.lang.String, java.lang.String)](https://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedError(android.webkit.WebView, int, java.lang.String, java.lang.String)) がAPI level 23 から deprecatedになりました。

代わりに [onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)](https://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedError(android.webkit.WebView, android.webkit.WebResourceRequest, android.webkit.WebResourceError)) が用意されたのですが、これを使うときの注意点のまとめメモです。

注意点

onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)のドキュメントを見てみるとこんな記載になっています

Report web resource loading error to the host application. These errors usually indicate inability to connect to the server. Note that unlike the deprecated version of the callback, the new version will be called for any resource (iframe, image, etc), not just for the main page. Thus, it is recommended to perform minimum required work in this callback.

以前とは違ってiframeのエラーだったり、画像が取得できなかったりした場合もこのコールバックが呼ばれるようになってしまいました。

そのため、onReceivedError(android.webkit.WebView, int, java.lang.String, java.lang.String) が呼ばれたらエラー表示をするような使い方をしている場合、同じことをonReceivedError(WebView view, WebResourceRequest request, WebResourceError error)でそのまま実行すると、リンク切れ画像があるようなページを表示する際にエラーになってしまいます。

解決策

onReceivedError(android.webkit.WebView, int, java.lang.String, java.lang.String) と同じような使い方をしたい場合は以下のようにします。

    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        if (request.isForMainFrame()) {
            // エラー処理を実行
        }
    }

WebResourceRequest.html#isForMainFrame() を使ってメインページのリクエストに対してだけエラー処理を実行するようにします。

26
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?