javascript - 如何从 Android 调用 javascript 函数

标签 javascript android

现在我将继续在 web View 中显示条形图,借助下面的代码显示条形图。

public class sample extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final WebView webview = (WebView)this.findViewById(R.id.webView);
        WebSettings webSettings = webview.getSettings();

        webSettings.setJavaScriptEnabled(true);  
        webSettings.setBuiltInZoomControls(true);
        webview.requestFocusFromTouch();

        webview.setWebChromeClient(new WebChromeClient());
        webview.setWebViewClient(new WebViewClient() 
        {

            public void onPageFinished(WebView view, String url)
            {
                  String str = "john";
              webview.loadUrl("javascript:callFromActivity('"+str+"')");

            }
        }
            );

        webview.loadUrl("file:///android_asset/mypage.html");
    }



}

实际上我需要将某些值从 Android 传递到 javaScript 并在图表中显示这些值(例如:在条形图中,我需要在图表中显示不同的用户名,我从 Android 类到 js 获取这些值)。 按照链接将值从 Android 传递到 js:http://android-er.blogspot.in/2011/10/call-javascript-inside-webview-from.html

js文件:

<html>

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

<script>
var name=null;

function callFromActivity(s) {
 name = document.getElementById("mytext").innerHTML = s;
alert(name);

}


google.load('visualization', '1.1', {packages: ['corechart', 'bar']});

google.setOnLoadCallback(drawStacked);
function drawStacked() {

alert(name);
 console.log(name);
  var data = google.visualization.arrayToDataTable([
          ['USER', 'NAME', 'COUNT', 'POSITION'],
          ['USER1', name, 1, 1],
          ['USER2', name, 1, 2]


        ]);

      var options = {


  is3D: true, title: 'INVOICE',
        width: 1200,
        height: 240,
        legend: { position: 'top'},
        bar: { groupWidth: '50%' },
        isStacked: true,
      };

      var chart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
      chart.draw(data, options);

    }
</script>
<body >
<div id="chart_div"></div>
<p id="mytext">Hello!</p>
</body>
</html>

我的问题:

callFromActivity 函数获取该值,但如果我将其传递给drawStacked,它会显示为未定义。

如何解决这个问题,如果有其他选择,请帮我解决这个问题。

最佳答案

您将 JS 接口(interface)注册到您的 webview 中。 JS 接口(interface)的一个例子是这样的

    public class JsExampleInterface
    {

    private Context mContext;

    public JsExampleInterface(Context context)
    {
        this.mContext = context;
    }

    /**
     * Returns all the Device info
     * @return DeviceInfo object
     */
    @JavascriptInterface
    public String getDeviceInfo()
    {
        DeviceInfo deviceInfo = new DeviceInfo();
        deviceInfo.setSdk(Build.VERSION.SDK_INT);
        deviceInfo.setDevice(Build.DEVICE);
        deviceInfo.setModel(Build.MODEL);
        deviceInfo.setProduct(Build.PRODUCT);
        deviceInfo.setManufacturer(Build.MANUFACTURER);
        return mGson.toJson(deviceInfo);
    }
}

然后在你的onCreate方法中,你必须像这样注册这个接口(interface)

JsExampleInterface exampleInterface = new JsExampleInterface(this);
mWebView.addJavascriptInterface(exampleInterface, "ExampleInterface");

之后你就可以在 html 中使用这个 js 接口(interface)了,如下所示:

// This returns a JSON object with all device info
ExampleInterface.getDeviceInfo()

关于javascript - 如何从 Android 调用 javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32308799/

相关文章:

javascript - 无法从 CDN 下载 Mustache.js 文件

Android Web 应用程序 - 应用程序显示在键盘上方

android - 在房间数据库 android 中查询时合并两个实体

android - 将 React Native 组件嵌入到平台原生代码中?

java - 使用哪个框架从样条线挤出 3D 对象

android - 检查设备是否正在运行 Android-Things

javascript - Jquery 数据表排序图标不显示在标题上

javascript - 使用 PHP、AJAX 将数据发布到不同域不起作用

asp.net - Stack Overflow 与支持 JavaScript 的横幅配合使用效果最佳

javascript - FF 3.5 扩展名 : window. 标题为 'undefined'