0

私はこのようなhtmlファイルを持っています

<html>
<head>
     This is a test
    <script>
    function testingConsole() {
    console.log("Reached end of Body");
    }
    </script>


</head>

<body>
    <script type="text/javascript">testingConsole();</script>
</body>
</html>

そして私のコードはこのように見えます

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.chart);

    webView = (WebView) findViewById(R.id.wvChart);
    webView.loadUrl("file:///android_asset/Chart/chart.html");
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webView.setWebChromeClient(new WebChromeClient());

    webView.loadUrl("javascript:testingConsole();");
}

htmlファイルが正常に読み込まれ、「これはテストです」というテキストがWebViewに表示されます。そして、スクリプトtestingConsole(); htmlファイルがそれを呼び出しているので、本来あるべきようにそれ自体で実行されます。しかし、コードから呼び出すと、「Uncaught ReferenceError:testingConsole is not defined at null:1」というエラーが発生します。

4

1 に答える 1

5

メソッドは同期的に実行されloadUrl(String)ません。これWebViewは他のスレッドで機能してページをロードし、その中のJavaScriptを解析して実行します。

WebViewClientそのオーバーライドの実装/サブクラスを作成onPageFinished(WebView, String)し、Webビューをリッスンして「chart.html」のロードを完了する必要があります。次にloadUrl、JavaScriptを使用して2番目を呼び出すことができます。これで、うまくいくと思います。私はこれをテストしていませんので、テストしたかどうか教えてください。

于 2012-10-10T10:20:32.553 に答える