嗨,目前我想从我的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上运行,最后一部分没有用,有人知道为什么?
答案 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()。