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 相关文章推荐
js 日期转换成中文格式的函数
Jul 07 Javascript
jquery 元素相对定位代码
Oct 15 Javascript
jquery select动态加载选择(兼容各种浏览器)
Feb 01 Javascript
jquery创建一个ajax关键词数据搜索实现思路
Feb 26 Javascript
js调试系列 源码定位与调试[基础篇]
Jun 18 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
Bootstrap开关(switch)控件学习笔记分享
May 30 Javascript
深入理解Javascript箭头函数中的this
Feb 13 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
Nov 09 Javascript
如何阻止移动端浏览器点击图片浏览
Aug 29 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
Feb 20 Vue.js
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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
jquery json 实例代码
2010/12/02 Javascript
JS读取XML文件示例代码
2013/11/15 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
Javascript的比较汇总
2016/07/25 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
canvas学习之API整理笔记(一)
2016/12/29 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
python实现进程间通信简单实例
2014/07/23 Python
推荐11个实用Python库
2015/01/23 Python
python字典DICT类型合并详解
2017/08/17 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
Python中文件的读取和写入操作
2018/04/27 Python
PyQt5 实现给窗口设置背景图片的方法
2019/06/13 Python
下载官网python并安装的步骤详解
2019/10/12 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
python自动生成证件号的方法示例
2021/01/14 Python
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
2014年语文教师工作总结
2014/12/18 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
小学生安全教育主题班会
2015/08/12 职场文书