JS拉起或下载app的实现代码


Posted in Javascript onFebruary 22, 2017

产品提了个需求,通过手机网页判断是否安装了自己公司app,如果安装了则拉起app,没有安装则跳转到下载页。

经过各种查阅资料尝试总结了一个还算可以的办法。

拉起app的原理就是js和原生统一好一个地址,例如(qiyimobile://self/qiyi.madeindexpage)。然后浏览器发起请求,如果app安装了则会拦截这个请求并且打开。

下面是安卓代码配置。其实scheme和host要和js这边统一

<span style="font-size:18px;"><intent-filter> 
        <action android:name="android.intent.action.VIEW" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
        <category android:name="android.intent.category.BROWSABLE" /> 
        <data  
      android:scheme="qiyimobile"  
      android:host="self/qiyi.madeindexpage"  
      android:pathPrefix="/**"> 
     </data> 
</intent-filter></span>

js这边稍微麻烦一些。如果只拉起app比较简单,直接通过a连接或者window.location.href=“**”即可。不过这里有个问题,就是有些手机在未安装app的时候会识别我们之前定的那个协议尝试打开这个网页,当然会报找不到网页。这里用iframe的方式兼容性稍好。

var ifr = document.createElement('iframe');
 ifr.src = 'qiyimobile://self/qiyi.madeindexpage';
 document.body.appendChild(ifr);

当手机未安装app时应该跳转到下载页,很多人说延时一下直接跳转就行,如下

window.location.href=“打开地址”
 setTimeout(function() {  
  window.location.href=“下载地址”
      }, 500);

当然这样也是有问题的,因为有的手机拉起app也不会自动清除定时器,即无论是否安装app,页面都会在500ms后跳转到下载页。所以判断是否需要跳转到下载页是最麻烦的事。最终尝试如下是比较好的解决方法。

设置一个初始时间,打开拉起app地址后有个结束时间,计算两者之差,当差大于一定时间是说明安装了app,当差很小时说明没有打开app,需要跳转到下载页。

最终代码如下

downloadapp.addEventListener('click', function() {
      var start = new Date();//记录初始时间
      var t = 500;
      var ifr = document.createElement('iframe');
      ifr.src = 'qiyimobile://self/qiyi.madeindexpage';//打开app
      document.body.appendChild(ifr);
      ifr.onload = function() {
      };
      ifr.style.display='none';
      setTimeout(function() {
        document.body.removeChild(ifr);
        var end = new Date();//记录结束时间
        console.log(end - start)
        if (end - start <= (t + 30)) {//两者之差小于30ms时跳转到下载页
          window.location.href = "https://www.baidu.com"
        }
      }, t);
    })

以上所述是小编给大家介绍的JS拉起或下载app的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript开发时的五个注意事项
Dec 08 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
Mar 14 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
JavaScript计时器示例分析
Feb 05 Javascript
javascript手工制作悬浮菜单
Feb 12 Javascript
nw.js实现类似微信的聊天软件
Mar 16 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
Dec 18 Javascript
jQuery+ajax简单实现文件上传的方法
Jun 03 Javascript
PhotoSwipe异步动态加载图片方法
Aug 25 Javascript
详解AngularJS controller调用factory
May 19 Javascript
Angular-UI Bootstrap组件实现警报功能
Jul 16 Javascript
vue特效之翻牌动画
Apr 20 Vue.js
js实现带简单弹性运动的导航条
Feb 22 #Javascript
bootstrap fileinput 插件使用项目总结(经验)
Feb 22 #Javascript
javascript 网页进度条简单实例
Feb 22 #Javascript
详解闭包解决jQuery中AJAX的外部变量问题
Feb 22 #Javascript
js实现PC端根据IP定位当前城市地理位置
Feb 22 #Javascript
纯JS实现轮播图
Feb 22 #Javascript
javascript 操作cookies详解及实例
Feb 22 #Javascript
You might like
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
JavaScript实现iframe自动高度调整和不同主域名跨域
2016/02/27 Javascript
js微信分享API
2020/10/11 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
详解Python的Django框架中的模版继承
2015/07/16 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
python分割列表(list)的方法示例
2017/05/07 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
HTML5实现动画效果的方式汇总
2016/02/29 HTML / CSS
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
英语自荐信常用语句
2013/12/13 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
拾金不昧的表扬信
2014/01/16 职场文书
五型班组建设方案
2014/02/10 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
通用自荐信范文
2014/03/14 职场文书
学习经验交流会主持词
2014/04/01 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
三八妇女节致辞
2015/07/31 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis