一、建立JSbrideg.js文件

var jsBridge = {
    isAndroid: null,
    isIOS: null,
    callHandlerFunc: function(json_data){
        var that = this;
        var res_data = null;
        var nv = null;
        // alert("callHandlerFunc");
        var u = navigator.userAgent;
        that.isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
        that.isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
        if(that.isIOS){
            // alert("ios");
            nv = window.GCWebviewJSBridge;
        }else{
            nv = window.WebViewJavascriptBridge;
        }
        nv.callHandler('getOS', json_data, function (response) {
            res_data = response;
        });
        return res_data;
    },
    initJsBridge: function(readyCallback){
        var that = this;
        var u = navigator.userAgent;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
        var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
        // 注册jsbridge
        function connectWebViewJavascriptBridge(callback) {
            if (isAndroid) {
                if (window.WebViewJavascriptBridge) {
                    callback(WebViewJavascriptBridge)
                } else {
                    document.addEventListener(
                        'WebViewJavascriptBridgeReady'
                        , function () {
                            callback(WebViewJavascriptBridge)
                        },
                        false
                    );
                }
                return;
            }
            if (isIOS) {
                // alert("ios2222");
                if (window.GCWebviewJSBridge) {
                    return callback(GCWebviewJSBridge);
                }
                if (window.GCWVJSBCallBacks) {
                    return window.GCWVJSBCallBacks.push(callback);
                }
                window.GCWVJSBCallBacks = [callback];
                var GCWVJSBIframe = document.createElement('iframe');
                GCWVJSBIframe.style.display = 'none';
                GCWVJSBIframe.src = 'gcwvjsbscheme://__GC_BRIDGE_LOADED__';
                document.documentElement.appendChild(GCWVJSBIframe);
                setTimeout(function() { document.documentElement.removeChild(GCWVJSBIframe)
                }, 0);
            }
        }
        // 调用注册方法
        connectWebViewJavascriptBridge(function (bridge) {
            if (isAndroid) {
                bridge.init(function (message, responseCallback) {
                    console.log('JS got a message', message);
                    responseCallback(data);
                });
            }
            // 只有在这里注册过的方法,在原声代码里才能用callHandler的方式调��?
           //jsbridge_getJsMessage 是与app定义的方法,前端定义好参数传递,通过此方法响应回传给前端想要的数据data
            bridge.registerHandler('jsbridge_getJsMessage', function (data, responseCallback){
                var jsdata = JSON.parse(data);
              
                responseCallback('native 传过来的是 2:' + data);
            });
            readyCallback();
        });
    }
}
jsBridge.initJsBridge();
export  default {
 
    //发送数据给原生Native App
     callHandler(data) {
     let json = data;
    return jsBridge.callHandlerFunc(json);
},
}

二、注意:在man.js注册使用

import bridge  from 'components/JSbridge'
Vue.prototype.$bridge = bridge;
当需要与app通信获取用户信息,来在前端做路由权限控制时候,不可以在

router.beforeEach((to, from, next) => {})中调用,因为此时 页面未加载,

window.WebViewJavascriptBridge或者

window.GCWebviewJSBridge 都不存在。
本人处理是在 App.vue中  
    watch:{//监测
            '$route'(to,from){

                let app = window.localStorage.getItem('isapp'); //获取是否app进入
                let useid = window.localStorage.getItem('user_id'); //获取useid

if(app){

                    if(!useid){
                        if(to.path == '/' || to.path == '/c' || to.path == '/a' ||  to.path == '/b'){
                            return;
                        }

}else{

                      var json= {"type":101,"videoId":""};
                      this.$bridge.callHandler(JSON.stringify(json));向app通信,会在注册方法中得到用户信息,把用户id(用户信息)记录缓存中

}

           
             }}

vue 项目使用JSbrideg.js与app通信的更多相关文章

  1. vue项目配置Mock.js

    扯在前面 最近一直在忙跳槽的事情,博客也好久没有更新了,上次更新还是去年,不出意外的话,从今天起继续今年的博客之旅. 今天继续完善我之前的项目架构,从零开始搭建vue移动端项目到上线,有需要的同学可以 ...

  2. 利用HBuilder将vue项目打包成移动端app

    事先准备,开发完成的web app项目(也可以利用vue-cli脚手架构建vue模板项目),npm run dev可以正常预览的项目 1,将项目目录下config文件内index.js中assetsP ...

  3. 在vue项目中的js文件里使用vue实例

    参考的网址:https://blog.csdn.net/weixin_34353714/article/details/86958742 不为其他,就为了记录一下,方便以后查看: 第一种方法: 1.首 ...

  4. Vue项目【饿了么App】mock数据【data.json】

    1.前后端分离式开发,约定好数据字段接口! 2.前端mock静态数据,开发完毕后,与后端进行数据联调! 3.vue.config.js 配置 devServer const appData = req ...

  5. Vue 项目中 外部js 如何获取 vue 实例

    1.将main.js 中的 Vue 实例暴露出去 2.在外部js中导入main.js (    import vm from '../main' );

  6. webpack / vue项目 config/index.js配置(用于配置webpack服务器代理)

    'use strict' // Template version: 1.1.3 // see http://vuejs-templates.github.io/webpack for document ...

  7. vue项目引入第三方js插件,单个js文件引入成功,使用该插件方法时报错(问题已解决)

    1.引入第三方js文件,npm安装不了 2.控制台显示引入成功 3.在methods下使用 图片看不清请看下面代码 updateTime() { setInterval(()=>{ var cd ...

  8. vue项目进入mui.js报错 typeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode .....

    在做项目时,引用mui报错如下 看样子就是不支持严格模式吧. 解决方法是在根目录 下的.babelrc文件里面添加过滤掉.不用严格模式

  9. vue项目打包之后js文件过大怎么办?

随机推荐

  1. css技巧 1200px居中容器中某个div增加横屏背景

    <div class='container' style='width:1200px;margin:0 auto;'> <div style='width:200px;margin: ...

  2. poj 2993

    跟poj 2996反过来了,这里比较麻烦的就是处理白棋和黑棋各棋子对应的位置 还有在最后打印棋盘式|,:,.的时候会有点繁琐(- - ACMer新手 ): 直接看代码吧: #include<cs ...

  3. centos linux ip地址无法连接数据库,ssh登录服务器时必须使用22端口

    问题一:连接数据库时直接使用ip地址无法连接,必须使用ssh方式才能连接? 问题二:ssh登录服务器时必须使用22端口,在/etc/ssh/sshd_config中添加了10086端口,防火墙中已开启 ...

  4. C# 操作XML学习笔记

    1. Customers.xml <?xml version="1.0" encoding="utf-8"?> <cust:customers ...

  5. 【codeforces 764C】Timofey and a tree

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. js基础-原型

    1.定义:我们创建的函数都有一个prototype(原型)属性,该属性是一个对象,          原型模式声明中多了两个属性(自动生成). 构造函数:       function Box(nam ...

  7. 2018-2-13-win10-uwp-获取指定的文件-AQS

    title author date CreateTime categories win10 uwp 获取指定的文件 AQS lindexi 2018-2-13 17:23:3 +0800 2018-2 ...

  8. 【js】vue 2.5.1 源码学习 (九) 响应数组对象的变

    大体思路(八) 本节内容: 1.Observe 如何响应数组的变化 代理原型 数组变异方法 shell cacheArrProto methods 新添加的数组需要加到显示系统里面,拦截 push等的 ...

  9. 圆角效果 border-radius——阴影 box-shadow——为边框应用图片 border-image

    1.圆角效果 border-radius border-radius: 5px 4px 3px 2px; /* 四个半径值分别是左上角.右上角.右下角和左下角,顺时针 */ 不要以为border-ra ...

  10. 2019-9-2-win10-uwp-获得焦点改变

    title author date CreateTime categories win10 uwp 获得焦点改变 lindexi 2019-09-02 12:57:38 +0800 2018-2-13 ...