我正在使用启用了 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/