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下阻止表单重复提交、防刷新、防后退
Aug 17 Javascript
javascript call方法使用说明
Jan 11 Javascript
JavaScript中的Array对象使用说明
Jan 17 Javascript
js控制web打印(局部打印)方法整理
May 29 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
jQuery处理图片加载失败的常用方法
Jun 08 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
Oct 23 Javascript
javascript合并表格单元格实例代码
Jan 03 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
JavaScript编写的网页小游戏,很给力
Aug 18 Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 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
浅谈PHP语法(1)
2006/10/09 PHP
php初始化对象和析构函数的简单实例
2014/03/11 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
thinkPHP5.0框架命名空间详解
2017/03/18 PHP
JS target与currentTarget区别说明
2011/08/28 Javascript
jQuery中阻止冒泡事件的方法介绍
2014/04/12 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
js模仿java的Map集合详解
2016/01/06 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
详解ionic本地相册、拍照、裁剪、上传(单图完全版)
2017/10/10 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
全面了解python字符串和字典
2016/07/07 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
爱国演讲稿400字
2014/05/07 职场文书
应用外语系自荐信
2014/06/26 职场文书
民主评议政风行风整改方案
2014/09/17 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
企业法人代表证明书
2015/06/18 职场文书
中学语文教学反思
2016/02/16 职场文书
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android