首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android WebView 自定義錯誤頁面:完全替換系統默認頁面的方案

     編輯:程式設計綜合問答

方案一:舊版 API (API < 23)

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        view.loadUrl("file:///android_asset/error.html"); // assets 目錄下自定義頁面
        super.onReceivedError(view, errorCode, description, failingUrl);
    }
});

方案二:新版 API (API ≥ 23) 推薦

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        if (request.isForMainFrame()) { // 僅主框架錯誤才替換
            view.loadUrl("file:///android_asset/error.html");
        }
    }
    
    // 可選:攔截所有錯誤資源
    @Override
    public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
        if (request.isForMainFrame()) {
            view.loadUrl("file:///android_asset/error.html");
        }
    }
});

關鍵點

  • assets/error.html 放入項目 src/main/assets/ 目錄。
  • 調用 loadUrl 後**不返回**,讓 WebView 繼續加載自定義頁面,系統默認錯誤頁不會顯示。
  • 可在 error.html 中通過 document.referrer 或傳遞參數獲取原始錯誤 URL。

進階:動態生成錯誤頁

String html = "<html><body>Error: " + error.getDescription() + "</body></html>";
view.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved