преамбула
Мы находимся на стороне WebView
настройки.
На первый взгляд очевидный комментарий, но если вам не нужно em> JavaScript
, не включайте JavaScript
, тогда вы не получите JavaScript
всплывающих окон. Я предполагаю, что вам ДЕЙСТВИТЕЛЬНО нужно JavaScript
(помните, что это может быть XSS-уязвимость) и хотите сделать все возможное, чтобы отключить всплывающие окна, которые могут< /strong> неизбежно последуют.
ИНФО:
WebViewClient. Переопределите это поведение вашего WebView
, например. поэтому ссылки открываются в вашем WebView
. WebChromeClient позволяет выполнять Javascript's alert()
и другие функции.< br> OP(1)setJavaScriptCanOpenWindowsAutomatically(true)
обычно блокируется только при выполнении вне обработчика событий.
OP = Исходное сообщение ; О).
Давайте настроим senario
Вот как я настраиваю свой обычный 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);
person
Jon Goodwin
schedule
30.12.2017