vue 中使用 webview 与安卓交互问题

h5界面需要嵌入到原生app 中,用户登录后需要将用户登录信息 传回 vue,安卓要求根目录下 新建html 文件,文件中定义函数,例如

function callJS(token){
      alert('token:' + token );
   }

问题是我如何检测到这个html 中的callJS 这个函数,以及如何监测到有token 值返回时跳转路由呢?

阅读 8.8k
3 个回答

记录下最后是怎么解决问题的!
补充下需求,需要将vue 项目嵌入到原生安卓app内,安卓通过webview 调用js 内定义的函数,将用户登陆后相关的信息传给js。将上面提到的callJS 函数定义在了app.vue中,具体代码如下:

mounted() {
    //声明全局函数
    window["callJS "] = (token) => {
      this.callJS (token);
    };
  },
 methods: {
    callJS(token) {
           //这里将token等信息存在session或者store 中 
    }

然后在/public/index.html 中进行调用,

  window.callJS(token);

但是后面发现路由只要有路由跳转就会调用callJS,至今没有想明白是什么原因导致的。定义了一个全局变量初始值false,第一次调用后赋值为true,限制只调用一次。

你描述的不清楚:
这个功能分为以下几步:
1:H5需要知道用户已经登录,也就是oc要通知H5用户已经登录,可以在页面传参数userId,H5这个页面监测到有值则用户登录了,否则就没有登录。
2:if(this.$route.query.userId){

//调接口
getUserToken(){
    获取用户token
    do something
}

}else{

do something

}

你可以尝试postMessage,在callJS里将token发送到你的vue中;
其实没必要非在根目录下建html文件,直接让安卓调用你vue里定义的全局方法就可以。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题