zoukankan      html  css  js  c++  java
  • Android中Java和JavaScript交互

    实现交互步骤:

    • WebView开启JavaScript脚本执行
    • WebView设置供JavaScript调用的交互接口。
    • 客户端和网页端编写调用对方的代码。

    js调用Java

      格式为:window.jsInterfaceName.methodName(parameterValues) 

    Java(webView)调用JS

      格式为:webView.loadUrl(“javascript:methodName(parameterValues)”)

    Android在4.4之前并没有提供直接调用js函数并获取值的方法,所以在此之前,常用的思路是 java调用js方法,js方法执行完毕,再次调用java代码将值返回。

    1.Java调用js代码
    String call = "javascript:sumToJava(1,2)";
    webView.loadUrl(call);
    2.js函数处理,并将结果通过调用java方法返回
    function sumToJava(number1, number2){
           window.control.onSumResult(number1 + number2)
    }
    3.Java在回调方法中获取js函数返回值
    @JavascriptInterface
    public void onSumResult(int result) {
      Log.i(LOGTAG, "onSumResult result=" + result);
    }

    Android在4.4之后使用evaluateJavascript即可。

    function getGreetings() {
          return 1;
    }

    java代码时用evaluateJavascript方法调用

    private void testEvaluateJavascript(WebView webView) {
      webView.evaluateJavascript("getGreetings()", new ValueCallback<String>() {
    
      @Override
      public void onReceiveValue(String value) {
          Log.i(LOGTAG, "onReceiveValue value=" + value);
      }});
    }

    注意

    • 上面限定了结果返回结果为String,对于简单的类型会尝试转换成字符串返回,对于复杂的数据类型,建议以字符串形式的json返回。
    • evaluateJavascript方法必须在UI线程(主线程)调用,因此onReceiveValue也执行在主线程。
  • 相关阅读:
    spring applicationContext.xml中<beans>中属性概述
    ES6新特性
    JavaWeb工程 目录结构
    web项目目录结构
    关于 eclipse启动卡死的问题 解决方法
    eclipse 僵死/假死 问题排查及解决
    Ajax的text/plain、application/x-www-form-urlencoded和application/json
    js的等值比较规则
    jsp页面中注释 <!-- --> 和<%-- --%> 的区别
    Spring的配置文件ApplicationContext.xml配置头文件解析
  • 原文地址:https://www.cnblogs.com/yl-saber/p/7418674.html
Copyright © 2011-2022 走看看