乐闻世界logo
搜索文章和话题

How to detect in WebView a 404 Error

6 个月前提问
5 个月前修改
浏览次数61

1个答案

1

在 WebView 中检测 404 错误通常涉及到监听 WebView 中内容加载的状态,用于确定是否出现了404(页面未找到)错误。不同的平台和编程语言有不同的方法来实现这一功能。以下是两个常见平台的示例:

Android WebView (Java/Kotlin)

在Android中,你可以通过覆盖 WebViewClient类的 onReceivedError() 方法来检测到404错误。例如:

java
WebView webView = findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient() { @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (error.getErrorCode() == 404) { // 在这里处理404错误 Toast.makeText(MyActivity.this, "Page not found (404)", Toast.LENGTH_LONG).show(); } } } @Override public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { super.onReceivedHttpError(view, request, errorResponse); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (errorResponse.getStatusCode() == 404) { // 在这里处理404错误 Toast.makeText(MyActivity.this, "Page not found (HTTP 404)", Toast.LENGTH_LONG).show(); } } } }); webView.loadUrl("http://www.example.com");

注意,onReceivedError() 方法可以捕获到请求过程中出现的所有错误,包括404错误。而onReceivedHttpError() 方法专门用于捕获HTTP错误代码。

iOS WebView (Swift)

在iOS中,如果你使用的是 WKWebView,则可以通过实现 WKNavigationDelegate 协议的 webView(_:didFailProvisionalNavigation:withError:)webView(_:didFail:withError:) 方法来检测错误。

swift
import WebKit class ViewController: UIViewController, WKNavigationDelegate { var webView: WKWebView! override func viewDidLoad() { super.viewDidLoad() webView = WKWebView(frame: view.bounds) webView.navigationDelegate = self view.addSubview(webView) if let url = URL(string: "http://www.example.com") { let request = URLRequest(url: url) webView.load(request) } } func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { if let errorCode = (error as NSError).code, errorCode == 404 { // 处理404错误 print("Page not found (404)") } } func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { if let errorCode = (error as NSError).code, errorCode == 404 { // 处理404错误 print("Page not found (404)") } } }

在这个示例中,如果发生了404错误,错误会被捕获,然后可以在这些代理方法中进行处理。

这些代码段展示了如何在不同平台的 WebView 上检测404错误。实际操作时,你可能还需要处理其他类型的错误,并为用户提供相应的反馈或者备选方案。

2024年6月29日 12:07 回复

你的答案