You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓APK的WebView在服务端离线时暴露地址问题如何解决

Android WebView替换默认错误页解决方案

核心实现逻辑

  • 自定义WebViewClient,重写onReceivedError方法拦截页面加载错误事件
  • 拦截后屏蔽系统默认错误页,自行实现错误提示逻辑

代码示例(Kotlin)

webView.webViewClient = object : WebViewClient() {
    // 适配Android 6.0及以上版本
    override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
        super.onReceivedError(view, request, error)
        // 仅拦截主页面加载错误,避免子资源加载失败触发逻辑
        if (request?.isForMainFrame == true) {
            // 方案1:展示空白页
            view?.loadUrl("about:blank")
            
            // 方案2:弹出Toast提示
            Toast.makeText(this@YourActivity, "当前网络异常,请稍后重试", Toast.LENGTH_SHORT).show()
            
            // 方案3:加载本地自定义错误提示页(可放入assets文件夹)
            // view?.loadUrl("file:///android_asset/error.html")
            
            // 方案4:直接隐藏WebView,展示布局中预先写好的通用错误提示组件
            // webView.visibility = View.GONE
            // errorLayout.visibility = View.VISIBLE
        }
    }

    // 兼容Android 5.1及以下版本
    override fun onReceivedError(view: WebView?, errorCode: Int, description: String?, failingUrl: String?) {
        super.onReceivedError(view, errorCode, description, failingUrl)
        view?.loadUrl("about:blank")
        Toast.makeText(this@YourActivity, "当前网络异常,请稍后重试", Toast.LENGTH_SHORT).show()
    }
}

代码示例(Java)

webView.setWebViewClient(new WebViewClient() {
    // Android 6.0+
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        if (request.isForMainFrame()) {
            view.loadUrl("about:blank");
            Toast.makeText(YourActivity.this, "当前网络异常,请稍后重试", Toast.LENGTH_SHORT).show();
        }
    }

    // Android 5.1及以下兼容
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
        view.loadUrl("about:blank");
        Toast.makeText(YourActivity.this, "当前网络异常,请稍后重试", Toast.LENGTH_SHORT).show();
    }
});

注意事项

  • 必须同时重写两个onReceivedError方法,兼容不同Android系统版本,避免低版本系统依然弹出默认错误页
  • 增加isForMainFrame判断逻辑,避免页面内的图片、脚本等子资源加载失败触发错误处理逻辑,仅在主页面加载失败时执行替换操作
  • 如果使用本地自定义错误页,可将html文件放入项目src/main/assets目录下,通过file:///android_asset/xxx.html路径加载

内容的提问来源于stack exchange,提问作者Derox_b2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:06:00