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 相关文章推荐
3分钟写出来的Jquery版checkbox全选反选功能
Oct 23 Javascript
Extjs根据条件设置表格某行背景色示例
Jul 23 Javascript
javascript每日必学之多态
Feb 23 Javascript
深入理解MVC中的时间js格式化
May 19 Javascript
ionic实现可滑动的tab选项卡切换效果
Apr 15 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
Javascript中click与blur事件的顺序详析
Apr 25 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
JavaScript解析及序列化JSON的方法实例分析
Jan 04 Javascript
原生js+canvas实现贪吃蛇效果
Aug 02 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开发过程中常用函数收藏
2009/12/14 PHP
php错误级别的设置方法
2013/06/17 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
JS解决ie6下png透明的方法实例
2013/08/02 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
python类的继承实例详解
2017/03/30 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
Python函数生成器原理及使用详解
2020/03/12 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
如何验证python安装成功
2020/07/06 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
2014年平安夜寄语
2014/12/08 职场文书
汇报材料怎么写
2014/12/30 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python