如何仅从WebViewClient

时间:2017-05-19 10:49:06

标签: android android-webview webviewclient

上下文

在Android SDK中,onReceivedError(WebView view, int errorCode, String description, String failingUrl)已被弃用并替换为onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)。但是根据documentation

  

请注意,与不推荐使用的回调版本不同,新版本   将为任何资源(iframe,图像等)调用版本,而不仅仅是   对于主页

问题

我们有一个应用程序,在不推荐使用的onReceivedError方法中,有一个代码可以显示本机视图,而不是让用户在WebView中看到错误。

我们希望用新方法替换已弃用的onReceivedError方法。但我们不希望为主页面显示任何资源的错误的本机视图。

问题

我们如何在新onReceivedError中识别错误不是来自主页?

PS 1:我们不希望像this这样的解决方案存储主网址并将其与失败的网址进行核对。

PS 2:如果解决方案只是使用弃用的方法,那么对于新的Android版本,仍然可以保证它的保证是什么?

3 个答案:

答案 0 :(得分:5)

您不必存储原始网址。您可以从WebView传递给onReceivedError方法获取它。它始终是用户看到的当前页面的完整URL。因此,您不必担心它们导航到不同的页面。

@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
    if (request.getUrl().toString().equals(view.getUrl())) {
        notifyError();
    }
}

答案 1 :(得分:2)

WebResourceRequest为您的方案提供isForMainFrame()方法,该方法从API版本21开始提供:

enter image description here

来源:https://developer.android.com/reference/android/webkit/WebResourceRequest.html

答案 2 :(得分:0)

你可以像代码一样使用:

    WebView wv = (WebView) findViewById(R.id.webView);
     wv.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Log.i("WEB_VIEW_TEST", "error code:" + errorCode);
// here your custom logcat like as share preference or database or static varible.
                super.onReceivedError(view, errorCode, description, failingUrl);
        }
     });

祝你好运!