问题描述:
平时我们在使用WebView时,出现第三方页中出现返回事件window.history.go(-1),这时点击网页中的返回页面就一直重新刷不能退出当前界面
解决方案:
通过在android Webview中注入js,用于解决无法响应问题。
例如如下网页test.html:
<!DOCTYPE">
<html>
<head>
<title> New Document </title>
<meta charset="utf-8">
<!--允许全屏-->
<meta content="yes" name="apple-mobile-web-app-capable" />
<meta content="yes" name="apple-touch-fullscreen" />
<!--禁止电话号码和邮箱识别-->
<meta content="telephone=no,email=no" name="format-detection" />
<!--添加一个ios用的icon-->
<!--改成你想要的缩放比例-->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no" />
</head>
<body>
<div id="jump-back-btn">返 回</div>
</body>
</html>
在Android代码中:
WebSettings webSettings = mWebview.getSettings() ;
webSettings.setDefaultTextEncodingName( "utf-8");
webSettings.setJavaScriptEnabled(true);
mWebview.addJavascriptInterface(new JSInterface(), "TEST_WEB"); //声明android端相应js中方法的回调接口 注意“TEST_WEB”与js中声明的要对应
mWebview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mWebview.loadUrl("javascript:function testapi(){TEST_WEB.finish();}$(\".jump-back-btn\").on(\"click\",function(){testapi();window.history.go(-1);return false;})");
}
});
mWebview .loadUrl("file:///android_asset/test.html");
public class JSInterface {
@JavascriptInterface
public void finish() {
TestActivity.this.finish();
}
}
向webview中注入js事件,注意要在onPageFinished中注入,保证当前界面全部加载完成