如何仅从主页中的WebViewClient的新onReceivedError中检测错误

Gus*_*avo 5 android android-webview webviewclient

语境

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

请注意,与弃用的回调版本不同,新版本将针对任何资源(iframe,图片等)调用,而不仅仅是主页

问题

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

我们想onReceivedError用新方法代替不推荐使用的方法。但是我们不想在本机视图中显示任何资源的错误,而只显示主页。

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

PS 1:我们宁愿没有像解决这个存储主网址,并检查它,失败的URL。

PS 2:如果解决方案是仅使用不推荐使用的方法,那么对于新的Android版本仍可以保证调用该方法?

Ser*_* B. 8

WebResourceRequestisForMainFrame()您的方案,其可从API版本21起动方式:

在此处输入图片说明

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


ars*_*ent 5

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

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