我正在尝试使用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方法。
现在,它可以在每次通话时正常工作。

再次感谢您的关注!

10-05 20:57
查看更多