在onReceivedError之后,browser.loadurl无法正常工作

时间:2014-11-07 09:32:51

标签: javascript android html webview

嗨,目前我想从我的webview onReceivedError加载我自己的html文件,然后在按钮点击html文件后再次加载

首先,我在onCreate

期间调用它
browser.setWebViewClient(new WebViewLoginBrowser());
browser.getSettings().setJavaScriptEnabled(true);
browser.addJavascriptInterface(new ErrorPageInterface(), "AndroidErrorPage");

我关闭了我的WIFI,然后在我的onReceivedError中,我保存了failingUrl并从资产加载我的自定义HTML文件

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(getApplicationContext(),Integer.toString(errorCode) + "\n" + description + "\n" + failingUrl, Toast.LENGTH_LONG).show();
            ErrorPage = failingUrl;
            browser.loadUrl("file:///android_asset/Error Page.html");    
            }

然后在我的HTML代码中,我打开我的WIFI并且有一个按钮我按下来调用android以便它可以再次加载URL

<html><head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<link href="http://fonts.googleapis.com/css?family=Questrial" rel="stylesheet" type="text/css">

<script>
function myFunction() {
    AndroidErrorPage.ReloadPage("ON");
}

</script>
</head>

<body bgcolor="#FFFFF">
<p> That is an error </p>
<p> Make sure you have a working internet connection. </p>
<p> Please click the button below to try again </p>
<button type="button" onclick="myFunction()" style="width:200px;height:200px">Refresh</button>

</body>
</html>

最后一个不起作用的部分,从HTML调用的reloadPage应该启动loadUrl但它没有和Toast甚至没有显示(但是如果我删除行browser.loadUrl(ErrorPage);代码正常工作好的和吐司出现了)

public class ErrorPageInterface {
        @JavascriptInterface
        public void ReloadPage(String page) {
            browser.loadUrl(ErrorPage);
            // String currentpage = browser.getUrl();
            Toast.makeText(getApplicationContext(), page + "\n" + ErrorPage, Toast.LENGTH_LONG).show();
        }
    }

基本上我想要的是loadurl-&gt; onreceivederror-&gt;显示我的html文件 - &gt;单击html文件上的按钮 - &gt;再次在android上运行,最后一部分没有用,有人知道为什么?

1 个答案:

答案 0 :(得分:0)

而不是browser.loadUrl(ErrorPage);
使用 -

browser.post(new Runnable() {
                    @Override
                    public void run() {
                        browser.loadUrl("file:///android_asset/secondpage.html");
                    }
                });

因为在非UI线程&#39; JavaBridge&#39;上调用了browser.loadUrl()。