var u = navigator.userAgent;
window.isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
window.isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端window.jsbridge = function (callback) {if(window.isAndroid){if (window.WebViewJavascriptBridge) {return callback(WebViewJavascriptBridge);} else {document.addEventListener('WebViewJavascriptBridgeReady',function () {callback(WebViewJavascriptBridge)},false);}}if (window.isIOS) {// new ios method// if (window.WKWebViewJavascriptBridge) { return callback(WKWebViewJavascriptBridge); }// if (window.WKWVJBCallbacks) { return window.WKWVJBCallbacks.push(callback); }// window.WKWVJBCallbacks = [callback];// window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null)setupWebViewJavascriptBridge(callback);}}//初始化 这段代码的意思就是执行加载WebViewJavascriptBridge_JS.js中代码的作用
function setupWebViewJavascriptBridge(callback) {console.log("setupWebViewJavascriptBridge");if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }console.log("WebViewJavascriptBridge complte");if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }console.log("WVJBCallbacks complte");window.WVJBCallbacks = [callback];var WVJBIframe = document.createElement('iframe');WVJBIframe.style.display = 'none';WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';document.documentElement.appendChild(WVJBIframe);setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)}if (!window.isIOS) {jsbridge(function (bridge) {bridge.init(function (message, responseCallback) {var data = {};responseCallback(data);});})
}/*** @param  {option对象}* method: 调用的方法* data: 传递的参数* callback: 回掉方法* @return {[type]}*/
function bridgeCallHandler(option) {// alert(option.method)jsbridge(function (bridge) {bridge.callHandler(option.method,option.data || {},function (responseData) {if (option.callback) {option.callback(responseData)}});})
}//原生调js
let registerHandler = function (method, callback) {// alert(option.method);jsbridge(function (bridge) {bridge.registerHandler(method,function (data, responseCallback) {if (callback) {callback(data);}responseCallback(data || {});});})
}/*** 传入的option对象格式* {*    method:[String],*    data:[Object],*    callback:[Function]* }*/// js调用原生let callHandler = function (method, data, callback) {bridgeCallHandler({method,data,callback: function (responseData) {if (callback) {callback(responseData);}}})
}export default{registerHandler,callHandler
}//在main.js中引入
import jsBridge from "@/utils/jsBridge"
Vue.prototype.$jsBridge=jsBridge//在页面中使用mounted(){//监听app触发signatureSuccess,进行监听接收数据this.$jsBridge.registerHandler("signatureSuccess", (data)=>{console.log("监听获得的数据", data)})
}methods:{signature(){// showCaBoard: js与原生约定的方法, params: js传递给原生的参数,this.$jsBridge.callHandler("showCaBoard", params, (data)=>{console.log(data)})}}

使用jsBridge实现H5与原生App交互相关推荐

  1. 客户端相关知识学习(二)之h5与原生app交互的原理

    前言 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次 ...

  2. h5 与原生 app 交互的原理

    作者:senntyou segmentfault.com/a/1190000016759517 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如 ...

  3. h5与原生app交互的原理

    h5 与原生 app 交互的原理 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 ...

  4. 混合开发中,H5页面与原生app交互(方法互相调用与传参)

    H5与原生app交互,需要WebViewJavascriptBridge,废话不多直接上代码,下面是项目中的封装bridge.js的全部代码(示例代码为vue) //iOS 交互声明 function ...

  5. [html] H5如何与APP交互?有哪些方式?

    [html] H5如何与APP交互?有哪些方式? jsbridge与app通信 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容易, 但坚持一定很酷.欢迎大家一起讨论 主目录 与歌谣一起通关 ...

  6. H5和原生APP之间的区别

    原文:http://www.ui.cn/detail/247751.html 最近项目中因各种客观因素,移动端都是默认用的纯H5 APP,感受最深的就是各种坑啊,好大的坑啊.产品上线后,带着各种坑后的 ...

  7. H5和原生App的区别

    前端常识: 前端:指客户端 主要有: 移动端APP(Android.IOS等) Web前端(主要指H5) PC端软件 后端:值服务器端. 常见的服务端语言或技术: java Node.js Pytho ...

  8. [vue] 你有使用做过vue与原生app交互吗?说说vue与ap交互的方法

    [vue] 你有使用做过vue与原生app交互吗?说说vue与ap交互的方法[vue] 你有使用做过vue与原生app交互吗?说说vue与ap交互的方法 我的做法就是让app在webview把app的 ...

  9. android h5和原生方法调用,H5与原生APP之间的方法互通

    最近做与app端的混合开发,了解到了H5与原生app端之间的方法互通 首先是我们给app端定义方法供他们使用(以vue为例) methods中定义一个方法名称 VContent() { console ...

  10. vue 获取安卓原生方法_VUE H5调用原生APP方法实践笔记

    最近做与app端的混合开发,了解到了H5与原生app端之间的方法互通 首先是我们给app端定义方法供他们使用(以vue为例) methods中定义一个方法名称 VContent() { console ...

最新文章

  1. 51单片机常用知识点总结
  2. 可视化mysql怎么导入sql文件_使用navicat导入sql文件的方法步骤
  3. 总结一些linux目录结构和终端命令
  4. 深度学习 图像分类_深度学习时代您应该阅读的10篇文章了解图像分类
  5. Dijkstra-解决最短路径问题
  6. 在一个IPython Notebook单元中显示多个图像?
  7. 阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章
  8. session的创建方式
  9. eclipse配色方案推荐_收藏!58个设计师最佳配色工具网站
  10. 卸载McAfee for Mac
  11. 计算机系军训口号四句霸气,大一新生军训四句口号霸气押韵
  12. win7旗舰版激活提示错误代码0x80072EE2的最简单解决办法
  13. 奇迹暖暖登录显示服务器满,奇迹暖暖登录不是全屏
  14. msp430发送pwm信号_MSP430F149学习之路——PWM信号
  15. 谢烟客---------Linux之总结Linux基础
  16. 漫游费概念模糊,运营商自食其果
  17. 【项目笔记_RP552D】rtthread winusb 修改 vid 与 pid
  18. html标记是否都包含开始和结束,所有HTML标记符都包括开始标记符和结束标记符()...
  19. 小米5android p,久违的刷机 小米MIX Android P DP5 上手体验
  20. 四大浏览器删除浏览历史记录的快捷键

热门文章

  1. 【JAVA】利用MOM消息队列技术实现分布式随机信号分析系统
  2. Python之OpenGL笔记(36):环境光下的棋盘球体
  3. 用过滤器来解决JSP中文乱码问题
  4. html中字体 楷体_css怎么设置字体为楷体?
  5. 如何查看这本书有没有PDF版
  6. 两个实用型教学网站:菜鸟教程与W3School,估计是国内做得做好的了
  7. 西门子系列PLC教学视频资源4——S7-1200
  8. ETL工具——Taskctl Web应用篇
  9. Maven Pom文件详解
  10. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第4章 形式化说明技术