我正在使用带有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.
这不是我想要的。我想避免弹出窗口和警告框(包括提示和确认) 任何帮助将不胜感激
谢谢!
答案 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()