gpt4 book ai didi

android - 为 Android Webview ChromeClient 禁用警报/弹出窗口

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:41:31 26 4
gpt4 key购买 nike

我正在开发一个应用程序,该应用程序的 Activity/fragment 可以显示某些网站的网页。 Android webview (chrome) 正在弹出警报对话框以订阅其中一些推送通知,这会导致奇怪的闪烁/闪烁问题。

这是 webview 的部分及其设置

    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...() 方法并取消/确认结果但无济于事。

这方面的工作方法是什么?

最佳答案

类似于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);

关于android - 为 Android Webview ChromeClient 禁用警报/弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51234669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com