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 相关文章推荐
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
javascript使用正则表达式检测IP地址
Dec 03 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
Mar 29 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
May 16 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
js实现石头剪刀布游戏
Oct 11 Javascript
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
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
2009/04/24 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
详解vue-cli + webpack 多页面实例配置优化方法
2017/07/13 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python中OrderedDict的使用方法详解
2017/05/05 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python贪吃蛇游戏代码
2020/04/18 Python
wxPython实现整点报时
2019/11/18 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
怎样自定义一个异常类
2016/09/27 面试题
教你怎样写好自我评价
2013/10/05 职场文书
教师找工作推荐信
2013/11/23 职场文书
半年思想汇报
2013/12/30 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
爱我中华演讲稿
2014/05/20 职场文书
学习考察心得体会
2014/09/04 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书