你如何在android webview中调用javascript中程序员定义的函数?

时间:2015-10-07 22:58:42

标签: javascript android jquery highcharts android-webview

我在html文件中放了一个高图表,并将其加载到webview中。我做了一个名为set_needle()的函数,它将针设置为某个值。但是当我尝试在Java中加载对该函数的javascript调用时,没有任何反应。我看了几个例子,他们在我看来正在做我自己的事情,所以我不确定问题是什么。

这是html / js:     

{{1}}

以下是相关的java代码:

{{1}}

2 个答案:

答案 0 :(得分:0)

这是一个示例界面:

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

将它连接到WebView,如下所示:

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

Android是javascript对象的名称,因此您可以通过javascript调用它:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

@JavascriptInterface注释很重要;如果您没有,则无法从javascript调用该方法。

答案 1 :(得分:0)

由于您在html页面加载url指令之后立即调用JavaScript函数,因此在尝试执行JavaScript时页面可能未完全加载,从而导致错误。
如果是这种情况,我建议推迟对自定义WebViewClient的onPageFinished回调的myWebView.loadUrl("javascript:set_value(50)");指令。类似的东西:

myWebView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:set_value(50)");
    }
});