如果页面是"未找到404页面",如何从Android WebView查看?

wea*_*ire 20 android webview

我想从WebView检查"找不到404页面",如果它是404,那么我将恢复到上一页.Ty为你的帮助

编辑我想看的网页是纯.jpg 1.jpg 2.jpg 3.jpg但我不知道有多少图像存在.因此,如果有人可以提出另一种方法,欢迎他这样做.

Ale*_*rov 20

启动SDK 23(Android M),您可以使用onReceivedHttpError方法来捕获404和其他HTTP错误.只需覆盖你的内心WebViewClient

@Override
public void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
    Toast.makeText(view.getContext(), "HTTP error "+errorResponse.getStatusCode(), Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)

  • 请记住,将从文档中为任何资源(iframe,图像等)调用此回调,而不只是针对主页`` (3认同)
  • 我试过了,但是当我在 API 24 设备上收到 404 时,我的代码只是跳过它。 (2认同)

Lor*_*rty 15

我可能要晚了几年,但这是我必须解决的问题,因为这些答案都不起作用.

我最终使用onReceivedTitle并将标题与页面标题(在本例中为"找不到页面")从我试图打开的网站进行比较.

webview.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onReceivedTitle(WebView view, String title) {
            // TODO Auto-generated method stub
            super.onReceivedTitle(view, title);


            CharSequence pnotfound = "The page cannot be found";
            if (title.contains(pnotfound)) {
                pagenotfound = true;
                view.stopLoading();
                webview.loadUrl("https://www.google.com/search?hl=en&q=stackoverflow");

            }
        }

        public void onProgressChanged(WebView view, int progress) {
            activity.setProgress(progress * 1000);
        }
    });

webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {

            Toast.makeText(activity, "Oh no! " + description,
                    Toast.LENGTH_SHORT).show();

        }

        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            return true;
        }

        public void onPageFinished(WebView view, String url) {
            if (dialog.isShowing()) {
                dialog.dismiss();

            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

"pnotfound"将因站点而异.但通常一个站点使用相同的"页面未找到",因此您可以使用站点上的标题.如果您使用多个站点,则可能需要添加其他if.

希望它对某人有帮助.


Dar*_*ski 4

我会尝试检测 404 页面的加载。您可以通过在类shouldOverrideUrlLoading中实现方法来做到这一点WebViewClient

mGenericWebClient = new GenericWebClient();
mWebView.setWebViewClient(mGenericWebClient);

public class GenericWebClient extends WebViewClient {
    public boolean shouldOverrideUrlLoading(WebView view, String url)
    {
        if (url=="your404page.html") {
            view.goBack();
            return true;
        }
        return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

您还可以检查当onReceivedError404 错误发生时是否出现事件。

  • 如果 404 页面不受我控制怎么办?访问某些匿名网站返回 404? (5认同)