我正在开发一个活动/片段显示某些网站网页的应用程序。 Android Webview(Chrome浏览器)会弹出警报对话框,用于订阅其中的一些推送通知,这会引起奇怪的闪烁/闪烁问题。
这是网络视图及其设置的部分
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(false);
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCacheMaxSize(5 * 1024 * 1024);
webSettings.setAppCachePath("");
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webSettings.setUserAgentString(mUserAgent);
webView.setBackgroundColor(Color.argb(1, 0, 0, 0));
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
BaseWebViewFragment.this.onReceivedTitle(title);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
progressChanged(view, newProgress);
}
});
我需要完全禁用这些弹出窗口,但找不到解决方法。
我尝试完全禁用JS,但这会导致某些站点的加载问题。
我还尝试覆盖WebChromeClient的onJS ...()方法,并取消/确认结果,但无济于事。
这是什么工作方法?
答案 0 :(得分:0)
类似于this,您应该将html作为字符串并在其头部插入this script tag
<script type = "text/javascript">
window.alert = function() {};
</script>
因此,如果您的html字符串是 htmlStr ,则类似这样:
String script = "<script type = \"text/javascript\">\n" +
" window.alert = function() {}\n" +
" </script>";
String target = "<head>";
int ind = htmlStr.indexOf(target);
StringBuilder htmlBuilder = new StringBuilder(htmlStr);
htmlBuilder.insert(ind + target.length(), script);
String newHtml = htmlBuilder.toString();
,然后通过以下方式将 newHtml 加载到WebView中:
webView.loadDataWithBaseURL(null, newHtml, "text/html", "UTF-8", null);