当前位置:  开发笔记 > 前端 > 正文

如何编辑或创建WebView的自定义错误页面?

如何解决《如何编辑或创建WebView的自定义错误页面?》经验,为你挑选了2个好方法。

我创建了一个WebView布局,用于访问特定网站,但是当手机没有网络连接或页面超时时,编辑或创建自定义" 网页不可用 "资源会很有用.我知道这是可能的,因为如果您在手机处于飞行模式时打开应用程序" Wikidroid ",则会收到" 文章不可用 "错误页面而不是标准Android" 网页不可用 "错误页面.

我在互联网上搜索高低,并没有提出任何解决此请求的在线资源.任何和所有的帮助非常感谢.提前致谢.



1> Brian..:

要确定设备何时具有网络连接,请请求权限,然后您可以使用以下代码进行检查.首先将这些变量定义为类变量.

private Context c;
private boolean isConnected = true;

在你的onCreate()方法初始化c = this;

然后检查连接.

ConnectivityManager connectivityManager = (ConnectivityManager)
    c.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
    NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
    if (ni.getState() != NetworkInfo.State.CONNECTED) {
        // record the fact that there is not connection
        isConnected = false;
    }
}

然后拦截WebViewrequets,你可以做类似以下的事情.如果使用此方法,则可能需要自定义错误消息以包含onReceivedError方法中可用的一些信息.

final String offlineMessageHtml = "DEFINE THIS";
final String timeoutMessageHtml = "DEFINE THIS";

WebView browser = (WebView) findViewById(R.id.webview);
browser.setNetworkAvailable(isConnected);
browser.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (isConnected) {
            // return false to let the WebView handle the URL
            return false;
        } else {
            // show the proper "not connected" message
            view.loadData(offlineMessageHtml, "text/html", "utf-8");
            // return true if the host application wants to leave the current 
            // WebView and handle the url itself
            return true;
        }
    }
    @Override
    public void onReceivedError (WebView view, int errorCode, 
        String description, String failingUrl) {
        if (errorCode == ERROR_TIMEOUT) {
            view.stopLoading();  // may not be needed
            view.loadData(timeoutMessageHtml, "text/html", "utf-8");
        }
    }
});


Brian,感谢您查看代码我非常感谢您的帮助.我最终使用"onReceivedError"代码而不是加载"timeoutMessageHtml"字符串,我将应用程序"setContentView()"添加到我创建的具有自定义错误消息的新线性布局中.此外,关于拥有良好的Java基础,您是100%正确的.我已经阅读了几本Java书籍,而且我目前正在学习Java课程,但是我从中学到了最好的知识,所以我想到了学习Java比创建应用程序更好的方法.谢谢了.

2> 小智..:

Marco W.是对的.

myWebView.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        myWebView.loadUrl("file:///android_asset/custom_url_error.htm");

    }
});


这在大多数设备上看起来不太好.在调用onReceivedError()之前呈现标准错误页面.因此,标准错误页面可见几毫秒,直到加载自定义页面.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有