java - 在 android webview 中禁用弹出窗口和警报框

标签 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.

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

谢谢!

最佳答案

我尝试了 Kalel Wade 接受的答案中描述的方法,并且通过在每个进度事件上注入(inject) 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 引擎似乎会挂起;按钮保持按下状态,不会注册后续交互。

关于java - 在 android webview 中禁用弹出窗口和警报框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23138089/

相关文章:

javascript - webview 不显示 javascript windows.open()

php - 单击 PHP 中的菜单选项时 POST 方法不起作用

html - 如何删除 Bootstrap 中导航和超大屏幕之间的空白?

Java,一种使用保留字的方法

java - Deeplearning4j : How do I know if I have INTEL compilers installed on my windows machine?

java - 将 Maven 库中的 android.support.v4.util.ArraySet 替换为 androidx.collection.ArraySet

java - Android Studio 中的 "Expected resource of type layout/menu"

Android使用2个listview链接在一起

android - Mac、Android Studio、Emulator、SQLite 数据库——实际找到目录?

javascript - 如何在jquery mobile中按返回时检测页面显示事件?