禁用Android Webview ChromeClient的警报/弹出窗口

时间:2018-07-08 17:55:02

标签: android popup android-webview

我正在开发一个活动/片段显示某些网站网页的应用程序。 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 ...()方法,并取消/确认结果,但无济于事。

这是什么工作方法?

1 个答案:

答案 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);