Ответ 1
преамбула
Мы находимся на стороне WebView
установки уравнения.
На первый взгляд очевидный комментарий, но если вам не нужен JavaScript
, не включить JavaScript
, то вы не получите JavaScript
popup's, Я предполагаю, что вы DO нуждаетесь JavaScript
(помните, что это может быть XSS уязвимо) и хотите сделать что вы можете отключить всплывающие окна, которые может неизбежно следовать.
INFO
WebViewClient. Переопределите это поведение вашего WebView
, например. поэтому ссылки открыты в вашем WebView
.
WebChromeClient позволяет обрабатывать Javascript alert()
и другие функции.
OP (1) setJavaScriptCanOpenWindowsAutomatically(true)
обычно заблокирован только, когда выполняется вне обработчика события /STRONG > .
OP= Оригинальное сообщение ; O).
Позвольте настроить senario
Вот как я устанавливаю свой обычный WebView
:
WebView webView = (WebView) this.findViewById(R.id.webView1);//CustomWebView ?
WebSettings webView_settings = webView.getSettings();
//by setting a WebClient to catch javascript 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);