我有一个看起来像这样的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文件正常加载,文档“This is a test”显示在我的WebView中。和脚本testingConsole();由于html文件正在调用它,因此应该自行执行。但是,当我从我的代码中调用它时,我收到错误“Uncaught ReferenceError:testingConsole未定义为null:1”
答案 0 :(得分:5)
loadUrl(String)
方法不会同步执行; WebView
可以在其他线程上加载页面并解析并执行其中的任何JavaScript。
您应该创建一个覆盖WebViewClient
的{{1}}的实现/子类,并监听webview以完成“chart.html”的加载。然后你可以用你的JavaScript调用第二个onPageFinished(WebView, String)
,我打赌它会起作用。我没有测试过这个,所以如果有,请告诉我。