在android webview中禁用弹出窗口和警告框

时间:2014-04-17 16:03:34

标签: java android html webview

我正在使用带有javascript的webview,因为它在我的应用程序全天候是必需的。 我的问题是我需要避免弹出窗口,而在我的webview中加载url是否有办法做到这一点?

我遇到了onJsAlert()方法但是根据androids文档

 Tell the client to display a javascript alert dialog.
 If the client returns true, WebView will assume that the client will handle the dialog.
 If the client returns false, it will continue execution.

这不是我想要的。我想避免弹出窗口和警告框(包括提示和确认) 任何帮助将不胜感激

谢谢!

2 个答案:

答案 0 :(得分:16)

我尝试了Kalel Wade接受的答案中描述的方法,并且通过在每个进度事件上注入JavaScript,我能够阻止弹出窗口。但是,我发现了一种看起来更优雅的方法。

如果扩展WebChromeClient,则可以覆盖其onJsAlert()方法并阻止警报的内置处理程序。当你在它时,你可能想要阻止对confirm()和prompt()的调用:

WebChromeClient webChromeClient = new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        result.cancel();
        return true;
    }

    @Override
    public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
        result.cancel();
        return true;
    }

    @Override
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
        result.cancel();
        return true;
    }
};

webView.setWebChromeClient(webChromeClient);

鉴于您正在看到JavaScript警报,我相信您必须已经分配了一个WebChromeClient。 (如果不这样做,则不支持警报。)所以它应该只是添加上面的覆盖。

请务必在返回前调用result.cancel()。根据我的经验,如果你不这样做,JavaScript引擎似乎就会挂起;按钮保持按下状态,并且没有注册后续交互。

答案 1 :(得分:2)

您可以尝试覆盖警报,确认等。也许可以在何时允许以及何时不允许警报显示时添加标记。 JavaScript: Overriding alert()