vue与原生app的对接交互的方法(混合开发)


Posted in Javascript onNovember 28, 2018

小伙伴们在用vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,那就少不了与原生交互了,我最近就是在坐这个,踩了一些坑,拿出来给大家分享下。

0.通过url传输数据:(一般是在入口页面传下app的用户信息进来供vue h5使用)

methods: {
      // 接收url后的数据
      urltext() {
        let loc = location.href;  6         let n1 = loc.length;//地址的总长度
        let n2 = loc.indexOf("=");//取得=号的位置
        let outToken = loc.substr(n2 + 1, n1 - n2);//从=号后面的内容
        console.log(loc,n1,n2,outToken)
        this.outTokenPost(outToken) //传到处理函数
      },
}

1.原生APP提供一个接口对象的引用(例如一个扫码的接口,可能还有回调函数以获得扫码结果)

思路就是万物通过window 进行交互

// 将vue组件的要回调的函数暴露出去
mounted:function(){
      
        // 将subscanQRCallBack方法绑定到window下面,提供给外部调用
        window['scanQRCallBack'] = (result) => {
          this.subscanQRCallBack(result)
        }
   
    },

methods:{
      scan(){
        // alert('开始扫码了')
        window.client.startScanQR('OS与js交互',scanQRCallBack)// 通过window调用app提供的client对象
      },

      subscanQRCallBack(result){
        // alert('扫码结果6466:'+result);
        this.scanPost(result)
      },
}

由交互引发的对vue生命周期的思考

开发时遇到一个经典问题,需要在页面刚载入时与app交互判断是否显示一个弹窗。看似很简单,进入页面调一个交互方法即可,但这个需求的解决经历了几个步骤:

1、created

因为created时,实例就创建完成了,我开始的选择是在此生命周期挂载方法并调用交互,结果:页面闪退,猜测:实例虽有,但模板未编译挂载,app调用方法失败导致闪退

2、mounted

第二次将挂载和调用写在了mounted内,结果:页面闪退,猜测(误):挂载和调用靠的太近,可能方法未挂载完就直接调用,导致闪退

3、created+mounted

created内挂载方法,mounted内调用交互,结果:我的ios12无异常,几乎以为成功时,ios10还是发生了闪退,猜测ios12的webview对此问题进行了优化,考虑兼容性,方案不可行。

4、延时

猜测是window没有加载完便调用了window下的方法,导致闪退,对交互方法加了1s延时,成功!但体验一般,因为硬性的定时容易引发许多不可控的问题,而且弹窗延时的存在导致用户体验低下。

5、window.onload

onload 事件会在页面或图像加载完成后立即发生。mounted钩子里添加代码window.onload=function(){//调用交互},在window加载完成以后触发交互,而且此时间节点在vue的生命周期是不存在的,也是在mounted、created钩子后发生的,这个原生的方法还是很棒的,完美解决~!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
javascript arguments使用示例
Dec 16 Javascript
Angularjs制作简单的路由功能demo
Apr 14 Javascript
js实现延迟加载的方法
Jun 24 Javascript
Bootstrap CSS组件之输入框组
Dec 17 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
Nov 28 Javascript
javascript设计模式 ? 工厂模式原理与应用实例分析
Apr 09 Javascript
为react组件库添加typescript类型提示的方法
Jun 15 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 Javascript
JavaScript 生成唯一ID的几种方式
Feb 19 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 #Javascript
vue实现微信分享功能
Nov 28 #Javascript
vue微信分享到朋友圈 vue微信发送给好友
Nov 28 #Javascript
详解小程序rich-text对富文本支持方案
Nov 28 #Javascript
微信小程序实现简单评论功能
Nov 28 #Javascript
微信小程序实现省市区三级地址选择
Jun 21 #Javascript
Vue一次性简洁明了引入所有公共组件的方法
Nov 28 #Javascript
You might like
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
一个简单实现多条件查询的例子
2006/10/09 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP获取星期几的常用方法小结
2018/12/18 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
Windows下安装Scrapy
2018/10/17 Python
一看就懂得Python的math模块
2018/10/21 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
美国网上眼镜商城:Zenni Optical
2016/11/20 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
自动化专业本科毕业生求职信
2013/10/20 职场文书
区域销售经理岗位职责
2013/12/10 职场文书
联谊活动策划书
2014/01/26 职场文书
团队拓展活动总结
2014/08/27 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
党小组考察意见
2015/06/02 职场文书
淮海战役观后感
2015/06/11 职场文书
升学宴学生致辞
2015/07/27 职场文书
springcloud之Feign超时问题的解决
2021/06/24 Java/Android
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL