我正在尝试使用HighCharts在Android WebView中呈现图表。
我的应用程序应该做的很简单:
-加载HTML页面以及外部(但本地)css和js文件
-从应用程序的Java部分加载数据
-使用先前加载的数据作为参数调用JavaScript函数
我通过激活Javascript设置Webview:
mWebView.getSettings().setJavaScriptEnabled(true);
并且还通过设置WebClient来捕获javascript的控制台消息:
mWebView.setWebChromeClient(new WebChromeClient() {
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d(TAG, cm.message() + " -- From line "
+ cm.lineNumber() + " of "
+ cm.sourceId() );
return true;
}
});
这是我的HTML页面:
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="style.css" />
<title>Chart</title>
<script src="jquery.js"></script>
</head>
<body>
<script src="highstock.js"></script>
<script src="exporting.js"></script>
<script language="javascript">
function plot() {
console.log("Hello !");
}
</script>
<div id="container" style="height: 100%; width: 100%"></div>
</body>
</html>
我通过调用从应用程序的资源加载此页面
mWebView.loadUrl("file:///android_asset/page.html");
我的外部CSS文件似乎已被读取,我想外部JS文件也已正确加载
我读了无处不在的内容,可以随时通过调用
mWebView.loadUrl("javascript:plot()");
但是,我总是得到错误
有什么我可能会忘记的东西吗?
请注意,我加载页面并在loadUrl调用之后立即调用javascript方法。
谢谢 !
最佳答案
好的,对不起您的时间损失。我一直在寻找一个小时的答案,然后在发布问题后的15分钟内找到了解决方案。
问题似乎是对loadUrl的两个连续调用。可能在我已经调用javascript函数时,页面尚未正确加载。
我像这样在WebView上添加了一个加载侦听器
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url.equals("file:///android_asset/page.html")) {
mWebView.loadUrl("javascript:plot();");
}
}
});
因此,仅在页面完全加载后才调用javascript方法。
现在,它可以在每次通话时正常工作。
再次感谢您的关注!