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

d1x*_*ord 6 android popup android-webview

我正在开发一个应用程序,它有一个活动/片段,显示某些网站的网页.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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我需要完全禁用这些弹出窗口,但无法找到方法.

我尝试完全禁用JS,但它导致某些网站的加载问题.

我也尝试覆盖WebChromeClient的onJS ...()方法并取消/确认结果,但无济于事.

这是什么工作方法?

sai*_*men 0

与此类似,您应该获取 html 作为字符串并将此脚本标记插入其头部

  <script type = "text/javascript">
    window.alert = function() {};
  </script>
Run Code Online (Sandbox Code Playgroud)

所以如果你的 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();
Run Code Online (Sandbox Code Playgroud)

然后将newHtml加载到 WebView 中,如下所示:

webView.loadDataWithBaseURL(null, newHtml, "text/html", "UTF-8", null);
Run Code Online (Sandbox Code Playgroud)