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

use*_*671 6 html java android webview

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

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

 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.
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mar*_*and 17

我尝试了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);
Run Code Online (Sandbox Code Playgroud)

鉴于您正在看到JavaScript警报,我相信您必须已经分配了WebChromeClient.(如果不这样做,则不支持警报.)因此,只需添加上面的覆盖即可.

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


Kal*_*ade 4

您可以尝试覆盖警报、确认等。也许添加一个标志,规定何时允许和何时不允许显示警报。 JavaScript:重写alert()

  • 谢谢,我现在在页面加载的每个进度上注入 javascirpt。并且没有收到任何警报,谢谢! (3认同)