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为a标签的href赋值实现代码
May 03 Javascript
javascript遍历控件实例详细解析
Jan 10 Javascript
如何判断微信内置浏览器(通过User Agent实现)
Sep 01 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
JavaScript中的null和undefined区别介绍
Jan 01 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
May 03 Javascript
BootStrap便签页的简单应用
Jan 06 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
Vue列表渲染的示例代码
Nov 01 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 使用array函数实现分页
2015/02/13 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
JavaScript闭包 懂不懂由你反正我是懂了
2011/10/21 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
js实现跨域的4种实用方法原理分析
2015/10/29 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
jquery实现吸顶导航效果
2020/01/08 jQuery
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
EntityManager都有哪些方法
2013/11/01 面试题
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
专业销售业务员求职信
2013/11/18 职场文书
银行实习生的自我评价
2013/12/09 职场文书
师生聚会感言
2014/01/26 职场文书
运动会加油口号
2014/06/07 职场文书
高中地理教学反思
2016/02/19 职场文书
彻底解决MySQL使用中文乱码的方法
2022/01/22 MySQL