序言
我们处于等式的WebView 设置一边。
乍一看很明显的评论,但如果你不需要JavaScript,不要启用 JavaScript,那么你不会得到JavaScript 弹出窗口。我假设你确实需要JavaScript(记住它可能XSS vulnerable)并且想做你能做的 禁用 不可避免的弹出窗口。
信息:
WebViewClient。覆盖 WebView 的这种行为,例如所以链接在您的WebView 中打开。
WebChromeClient 可让您处理 Javascript's alert() 和其他功能。
OP(1)setJavaScriptCanOpenWindowsAutomatically(true)通常被阻止 仅在事件处理程序之外完成。
OP = 原帖;O)。
让我们设置一个场景
这就是我设置普通webview的方式:
WebView webView = (WebView) this.findViewById(R.id.webView1);//CustomWebView ?
WebSettings webView_settings = webView.getSettings();
//by setting a WebClient to catch javascript's console messages :
WebChromeClient webChromeClient = new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d(TAG, cm.message() + " -- From line "
+ cm.lineNumber() + " of "
+ cm.sourceId() );
return true;
}
});
webView_settings.setDomStorageEnabled(true);
WebViewClient webViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
setTitle(view.getTitle());
//do your stuff ...
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("file"))
{
// Keep local assets in this WebView.
return false;
}
}
});
//webView.setWebViewClient(new HelpClient(this));//
webView.setWebChromeClient(webChromeClient);
webView.setWebViewClient(webViewClient);
webView.clearCache(true);
webView.clearHistory();
webView_settings.setJavaScriptEnabled(true);//XSS vulnerable set to false ?
webView_settings.setJavaScriptCanOpenWindowsAutomatically(true);//set to false ?
webView.loadUrl("file:///android_asset/connect.php.html");//load something
OP(2) 让我们尽可能阻止
来自@markproxy 如果您扩展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);