vue项目 WebViewJavascriptBridge 适配android和ios
前言
最近在app 原生页面 嵌套 做Vue 的H5,混合开发,当然原生和Vue 交互方面当然用到 WebViewJavascriptBridge 这个东西啦,
当然在用到的时候也有问题,可以参考大佬的写法 然后结合自己的写法 ,自己整除一套适合的代码
这个是 https://github.com/marcuswestin/WebViewJavascriptBridge 这个是对WebViewJavascriptBridge 描述,不懂的可以去看看么
上代码
1.创建 src/utils/bridge.js 文件,用于封装 WebViewJavascriptBridge
//判断机型
let u = navigator.userAgent; function setupWebViewJavascriptBridge(callback) {
//var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
//判断ios 还是Android
if (/(iPhone|iPad|iPod|iOS)/i.test(u)) {
if (window.WebViewJavascriptBridge) {
return callback(window.WebViewJavascriptBridge)
}
if (window.WVJBCallbacks) {
return window.WVJBCallbacks.push(callback)
}
window.WVJBCallbacks = [callback]
let WVJBIframe = document.createElement('iframe')
WVJBIframe.style.display = 'none'
WVJBIframe.src = 'https://__bridge_loaded__'
document.documentElement.appendChild(WVJBIframe)
setTimeout(() => {
document.documentElement.removeChild(WVJBIframe)
}, 0)
}
} //安卓注册事件监听
function connectWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) {
callback(WebViewJavascriptBridge)
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady',
function () {
callback(WebViewJavascriptBridge)
},
false
);
}
} connectWebViewJavascriptBridge(function (bridge) {
//初始化
if (!/(iPhone|iPad|iPod|iOS)/i.test(u)) {
console.log("初始化")
bridge.init(function (message, responseCallback) {
//var data = {'Javascript Responds': 'Wee!'};
responseCallback(data);
});
}
}); export default {
callHandler(name, data, callback) {
setupWebViewJavascriptBridge(function (bridge) {
bridge.callHandler(name, data, callback)
})
},
registerhandler(name, callback) {
setupWebViewJavascriptBridge(function (bridge) {
bridge.registerHandler(name, function (data, responseCallback) {
callback(data, responseCallback)
})
})
}
}
2、在main.js 中引入.
import Bridge from './utils/bridge.js'
Vue.prototype.bridgeObj = Bridge
3.在需要调用客户端方法的组件中(事先需要与客户端同事约定好方法名)
this.$bridge.callhandler('ObjC Echo', params, (data) => { // 处理返回数据 })
4.当客户端需要调用 js 函数时,事先注册约定好的函数即可
this.$bridge.registerhandler('JS Echo', (data, responseCallback) => {
alert('JS Echo called with:', data)
responseCallback(data)
})
当然 我是封装了 这些方法在utils中,代码就不放出来了,
这样就可以调用啦, 适配ios 和android
完美哦 ,嘻嘻
vue项目 WebViewJavascriptBridge 适配android和ios的更多相关文章
- cordova+vue 项目打包成Android(apk)应用
现在使用vue开发的项目越来越多,使用vue开发的移动端打包就成了最大的问题.现在前端打包方案有好多种,但是综合来说,我比较喜欢用cordova来进行Android和ios的打包,配置完成之后,每次只 ...
- vue项目引入FastClick组件解决IOS系统下h5页面中的按钮点击延迟,连续点击无反应的问题
异常描述: ios系统手机中访问h5页面,按钮点击有延迟,连续点击卡顿.无反应. 异常原因: 这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设 ...
- 适配android和iOS上position:absolute和input问题
//适配android上absolute和input的问题var oHeight = $(document).height(); //屏幕当前的高度$(window).resize(function( ...
- vue项目中微信jssdk在ios签名失败
一.问题描述 1. vue项目中微信jssdk签名时,在安卓和ios是有差异的,签名时使用的url=window.location.href.split('#')[0],此时在安卓没问题,在ios会导 ...
- Cordova打包vue项目生成Apk (解决cordova build android抛出的zip问题)
最近对vue前端框架情有独钟.但研究了一下怎么把vue项目打包成android apk来玩玩. 首先讲一下创建vue2.x项目.其实在之前的文章中都有写过,有兴趣的同学可以去看看.http://www ...
- vue中的适配:px2rem
这应该是vue项目在适配移动端时候,最简单的方法之一下面是基本步骤(使用cnpm)1.下载并引入lib-flexible cnpm install --save lib-flexible 在main. ...
- Vue项目用于Ios和Android端开发
起因 前公司商城App项目使用的是H5开发,有微信公众号.Ios和Android三个版本,H5版本是自己写的一套框架,已经用了有些年头了,承载不下不断涌现出的新需求.而Ios和Android端通过we ...
- GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。
1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...
- Web项目也能一键打包Android、IOS
随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...
随机推荐
- 2019牛客暑期多校训练营(第六场)-E Androgynos (构造题)
题目链接:https://ac.nowcoder.com/acm/contest/886/E 题意:给出n,求能否构造一个含n个顶点的简单无向图,且它的补图与它同构. 思路:首先要满足与其补图同构,同 ...
- [转帖]VIM常用快捷键
VIM常用快捷键 https://www.cnblogs.com/markleaf/p/7808817.html 快捷键能够显著的提高工作效率 一.移动光标 h,j,k,l 上,下,左,右ctrl-e ...
- web应用安全
一.三种坏人与servlet安全 网络攻击者 对应的servlet安全规范 假冒者 认证 非法升级者 授权 窃听者 机密性 数据完整性 认证可以防止“假冒者”攻击,授权可以防止“非法升级者”攻击, ...
- easyswoole报错:failed: Error during WebSocket handshake: Unexpected response code: 200
WebSocket connection to 'ws://www.xxxx.com/xxx/xx' failed: Error during WebSocket handshake: Unexpec ...
- X86逆向3:通过修改关键CALL破解
软件逆向第一课中我们通过爆破的方式直接破解了程序的登录限制,但这一种方式很不合理,因为你只是破解了登录这一处的验证,如果程序内部还有其他的验证那么你需要再次爆破第二个验证,显然这种方式是很烦人的,如果 ...
- Java 封装与类
一.面向对象编程 面向对象编程三大特性:封装.继承和多态. 类是实现封装的手段,是面向对象编程的基本单元. 封装隐藏了类的内部实现细节,暴露给外界可控的操作,提高数据的完整性和安全性,提高模块的可重用 ...
- 解决tomcat端口冲突
1.根据8080端口号查找占用8080端口的进程 netstat -ano|findstr " 进程id:6352 2.根据进程ID查找进程名字 tasklist|findstr " ...
- css;js学习(一)
推荐基础前端学习地址https://ke.qq.com/course/315961蝉壳学院 清除浮动 .clearfix:before,.clearfix:after{ content: " ...
- centos7安装配置zabbix监控
CentOs7安装部署Zabbix3.4 1.关闭selinux和firewall systemctl stop firewalld setenforce 1.1检测selinux是否关闭 [ro ...
- google 高清卫星照片
rel: 如何下载 50 年前自己家乡的高清卫星照片 link: https://zhuanlan.zhihu.com/p/30953275