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。

您应该创建一个覆盖的实现/子类WebViewClientonPageFinished(WebView, String)监听 webview 以完成“chart.html”的加载。然后你可以用你的 JavaScript 调用第二个loadUrl,我敢打赌它会起作用。我还没有测试过,所以如果可以,请告诉我。

于 2012-10-10T10:20:32.553 回答