私はJSとAndroidのWebView
ページ(この例ではちょうどJSからの警告を表示)によってロードされ、変更したい:ページが応答しなくなった(evaluateJavascript
または.loadUrl("javascript:" ...
を使用して)JavaScriptを評価した後Android WebView.loadUrl()はJavaScriptを評価した後にページをフリーズしますか?
private static final String script2 = "alert('hello world');";
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Toast.makeText(MainActivity.this, "Alert from js:\n" + message, Toast.LENGTH_LONG).show();
return true; // ANSWER found:should return false in order NOT to freeze
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
getSupportActionBar().setTitle("Finishing ");
getSupportActionBar().setSubtitle(url);
if (cbScript2.isChecked()) { // true
runScript(script2);
}
getSupportActionBar().setTitle("Finished");
}
});
private void runScript(String script) {
if (cbApi19.isChecked()) // true
webView.evaluateJavascript(script, null);
else
webView.loadUrl("javascript:" + script);
}
- それができます」スクロールするか、リンクをクリックします。 docsによると
:evaluateJavascript
は非同期現在表示しているページのコンテキストでJavaScriptを評価します。
なぜページをフリーズしますか?ページの振る舞いに影響を与えずにJSを実行できますか?