项目需要,在vuejs开发的web项目中与APP进行通信,实现原理和cordova一致。使用WebViewJavascriptBridge。

其实也是通过拦截url scheme,支持ios6往前的系统

iOS与H5交互的方案

纵观所有iOS与H5交互的方案,有以下几种:

  • 第一种:有很多的app直接使用在webview的代理中通过拦截的方式与native进行交互,通常是通过拦截url scheme判断是否是我们需要拦截处理的url及其所对应的要处理的功能是什么。任意版本都支持。
  • 第二种:iOS7之后出了JavaScriptCore.framework用于与JS交互,但是不支持iOS6,对于还需要支持iOS6的app,就不能考虑这个了。
  • 第三种:WebViewJavascriptBridge开源库使用,本质上,它也是通过webview的代理拦截scheme,然后注入相应的JS。
  • 第四种:react-native

 

  1. /**
  2. * 函数描述:js调用webview事件
  3. *
  4. * jsBridge.callHandler(method, data, callBack(response));
  5. * @param method {string} 方法名
  6. * @param data {Object} 参数
  7. * @return {Object} 回调
  8. */
  9.  
  10. /**
  11. * 函数描述:webView调用JS事件
  12. *
  13. * jsBridge.registerHandler(method, callBack(response));
  14. * @param method {string} 方法名
  15. * @return {Object} 回调
  16. */
  17.  
  18. var JsBridge = {
  19. init: function(callback) {
  20. var u = navigator.userAgent;
  21. var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  22. if (!isiOS) {
  23. if (window.WebViewJavascriptBridge) {
  24. callback(WebViewJavascriptBridge)
  25. } else {
  26. document.addEventListener(
  27. 'WebViewJavascriptBridgeReady',
  28. function() {
  29. callback(WebViewJavascriptBridge)
  30. },
  31. false
  32. );
  33. }
  34. } else {
  35. if (window.WebViewJavascriptBridge) {
  36. return callback(WebViewJavascriptBridge);
  37. }
  38. if (window.WVJBCallbacks) {
  39. return window.WVJBCallbacks.push(callback);
  40. }
  41. window.WVJBCallbacks = [callback];
  42. var WVJBIframe = document.createElement('iframe');
  43. WVJBIframe.style.display = 'none';
  44. WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
  45. document.documentElement.appendChild(WVJBIframe);
  46. setTimeout(function() {
  47. document.documentElement.removeChild(WVJBIframe)
  48. }, 0)
  49. }
  50. },
  51.  
  52. first: function() {
  53. var u = navigator.userAgent;
  54. var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
  55. if (!isiOS) {
  56. var _this = this;
  57. _this.init(function(bridge) {
  58. bridge.init(function(message, responseCallback) {
  59. responseCallback(data);
  60. })
  61. })
  62. }
  63. },
  64.  
  65. registerHandler: function(name, fun) {
  66. var _this = this;
  67. _this.init(function(bridge) {
  68. bridge.registerHandler(name, fun);
  69. })
  70. },
  71.  
  72. callHandler: function(name, data, fun) {
  73. var _this = this;
  74. _this.init(function(bridge) {
  75. bridge.callHandler(name, data, fun);
  76. })
  77. }
  78. }
  79.  
  80. JsBridge.first();
  81.  
  82. export {
  83. JsBridge
  84. };

vuejs里封装的和IOS,Android通信模块的更多相关文章

  1. 微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案

    微软的云平台媒体服务为流媒体服务提供了多种选择,在使用流媒体服务为企业做流媒体方案时,首先需要确认要流媒体接收目标,如针对广大iOS, Android移动设备,由于它们都支持HLS 格式的流媒体,基于 ...

  2. 微软云平台媒体服务实践系列 2- 使用动态封装为iOS, Android , Windows 等多平台提供视频点播(VoD)方案

    文章微软云平台媒体服务实践系列 1- 使用静态封装为iOS, Android 设备实现点播(VoD)方案  介绍了如何针对少数iOS, Android 客户端的场景,出于节约成本的目的使用媒体服务的静 ...

  3. 封装 React Native 原生组件(iOS / Android)

    封装 React Native 原生组件(iOS / Android) 在 React Native中,有很多种丰富的组件了,例如 ScrollView.FlatList.SectionList.Bu ...

  4. 【转】从开发者的角度看待各移动平台 ios/android/wp7/win8ost title

    T_T 这伪技术博客都快给写成Tron的读书笔记专栏了,这样可不行欸~ 如今正是移动平台的战国时期,厌烦了去讨论移动平台的未来,也无意于在HTML5和Native App之间纠结.本文只从开发者纯技术 ...

  5. Xamarin体验:使用C#开发iOS/Android应用

    Xamarin是Mono创始人Miguel de Icaza创建的公司,旨在让开发者可以用C#编写iOS, Android, Mac应用程序,也就是跨平台移动开发.   简介 Xamarin是基于Mo ...

  6. fir.im Weekly - iOS/Android 应用程序架构解析

    假如问你一个iOS or Android app的架构,你会从哪些方面来说呢? 本期 fir.im Weekly 收集了关于  iOS/Android 开发资源,也加入了一些关于 Web 前端方面的分 ...

  7. 用c/c++混合编程方式为ios/android实现一个自绘日期选择控件(一)

    本文为原创,如有转载,请注明出处:http://www.cnblogs.com/jackybu 前言 章节: 1.需求描述以及c/c++实现日期和月历的基本操作 2.ios实现自绘日期选择控件 3.a ...

  8. C#/IOS/Android通用加密解密方法

    原文:C#/IOS/Android通用加密解密方法 公司在做移动端ios/android,服务器提供接口使用的.net,用到加密解密这一块,也在网上找了一些方法,有些是.net加密了android解密 ...

  9. 关于前端本地压缩图片,兼容IOS/Android/PC且自动按需加载文件之lrz.bundle.js

    一.介绍说明主要特点: ①在前端压缩好要上传的图片可以更快的发送给后端,因此也特别适合在移动设备上使用. ②兼容IOS/Android,修复了IOS/Android某些版本已知的BUG. ③按需加载文 ...

随机推荐

  1. 【Android】命令行jarsigner签字和解决找不到证书链错误

    1.签名失败 $jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLor ...

  2. [BI项目记]-配置Sharepoint2013支持文档版本管理笔记

    做开发或者做方案,写文档是很重要的一个工作,我们经常需要知道文档被修改的次数,谁在什么时间修改的文档,以及在某一个版本中,都修改了哪些内容,以及不同版本的文档之间有什么差别. 如何对文档进行版本管理, ...

  3. 如何在 SSAS服务器之间做同步

    简介: 从SQL Server 2005开始,分析服务就支持了同步的功能.本文将介绍如何在SQL Server 2012下同步Adventureworks的分析服务数据库.通过同步的功能,我们就来可以 ...

  4. 如何快速地从mongo中提取数据到numpy以及pandas中去

    mongo数据通常过于庞大,很难一下子放进内存里进行分析,如果直接在python里使用字典来存贮每一个文档,使用list来存储数据的话,将很快是内存沾满.型号拥有numpy和pandas import ...

  5. NSURLConnection 异步加载网络数据

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  6. redis数据类型之—String

    (1)String 简单介绍 string是redis中最基本的数据类型,一个字符串类型的值存储的最大容量是1GB. (2)String 常用命令

  7. [leetcode] 47. Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  8. 《DSP using MATLAB》示例Example5.12

    代码: n = 0:10; x = 10*(0.8) .^ n; y = cirshftt(x,6,15); n = 0:14; x = [x, zeros(1,4)]; %% ----------- ...

  9. Windows平台下为Python添加MongoDB支持PyMongo

    到Python官网下载pymongo-2.6.3.win-amd64-py2.7.exe 安装pymongo-2.6.3.win-amd64-py2.7.exe 参照官方的用例进行测试 打开命令提示符 ...

  10. php 正则 常用基础

    正则表达式 用来描述一串字符串的字符串 定界符 除了字母数字反斜线之外的所有字符都可以 / / (强制使用) | | !! 原子 在自然界中的最小单位 叫做原子 正则中的原子:可以打印的字母,数字,符 ...