webView 与 JS 间互相调用传值

以下Android代码基于kotlin编写

1 webView 与 JS 互相调用

webView 与 JS 间互相传值只能传递字符串

1.1 JS 部分代码

  <script>
    function getPhone(phone) {
        alert(phone)
    }
    var btn = document.getElementById("btn1");
    btn.onclick = function () {
        native.jsGetPhone("getPhone")
    };
  
  </script>

1.2 webView部分代码

.....
  webView?.addJavascriptInterface(new JSNativeInterface(activity, webView), "native")
.....

1.3 JSNativeInterface部分代码

  .....
  @JavascriptInterface
  fun jsGetPhone(callback:String) {  //提供给JS调用的方法
      activity?.runOnUiThread {
          var phone = "1111222233";
          webView.loadUrl("javascript:$callback('$phone')") //调用JS的方法
      }
  }
  .....

1.4 JS调用webView方法并传值

  native.jsGetPhone("getPhone")   //这里传递一个回调函数

1.5 webView调用JS方法并传值

  var phone = "1111222233";
  webView.loadUrl("javascript:$callback('$phone')")  //这里传递给JS一个手机号

2 webView 与 Vue 互相调用

2.1 Vue调用webView方法

和JS调用webView方法一样

  native.jsGetPhone("getPhone")   //这里传递一个回调函数

2.2 webView调用Vue方法

  • 1:在methods中定义方法
  • 2:在mounted中将定义的方法再赋值给window 如:
   window.getPhone = this.getPhone;

3 webView 调用 JS 传值注意事项

   var phone = "1111222233"

可以使用

  webView.loadUrl("javascript:"+ callback +"('" + phone + "')")

或者简洁一点

  webView.loadUrl("javascript:$callback('" + phone + "')")

或者更简洁

  webView.loadUrl("javascript:$callback('$phone')")

如果使用 下面这种 则会报 Uncaught ReferenceError: xxx is not defined

  webView.loadUrl("javascript:$callback($phone)")  //$phone外层需要加引号

注意
因为webView和JS互相传值的只能是字符串,所以通过loadUrl调用JS方法时,需要这种格式

  webView.loadUrl("javascript:getPhone('1111222233')")

因为 webView.loadUrl("…") 需要这样调用JS方法,所以如果这样写

  webView.loadUrl("javascript:$callback($phone)")

相当于

  webView.loadUrl("javascript:getPhone(1111222233)")

那我们调用 getPhone 传递的就不是字符串类型,就会报 Uncaught ReferenceError: xxx is not defined

所以需要 给传递的参数 再加一层引号

  webView.loadUrl("javascript:$callback('$phone')")

相当于

  webView.loadUrl("javascript:getPhone('1111222233')")

这样才可以调用JS的getPhone方法并传递参数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值