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 相关文章推荐
收集的网上用的ajax之chat.js文件
Apr 08 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
jquery选择器原理介绍($()使用方法)
Mar 25 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
js获取浏览器基本信息大全
Nov 27 Javascript
JavaScript中Function()函数的使用教程
Jun 04 Javascript
js实现n秒倒计时后才可以点击的效果
Dec 20 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
关于vue路由缓存清除在main.js中的设置
Nov 06 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
php+dbfile开发小型留言本
2006/10/09 PHP
PHP小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
分析PHP中单双引号的误区和双引号小隐患
2016/07/19 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
在nodejs中创建child process的方法
2021/01/26 NodeJs
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
2019/05/09 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
小学竞选班干部演讲稿
2014/08/20 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
王亚平太空授课观后感
2015/06/12 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js