利用js判断手机是否安装某个app的多种方案


Posted in Javascript onFebruary 13, 2017

前言

大家在日常开发的时候,经常会遇到这样的需求,通过检测手机,如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场,下面来给大家介绍几种解决的方案。

解决方案 一

//html代码中 的 a 标签,以微信为例,默认的是调用weixin scheme,去打开本机的微信,如果没有则跳转到相应连接

<a href="weixin://" rel="external nofollow" class="btn-download">立即打开</a>




// 为btn-download 绑定事件,如果在500ms内,没有解析到协议,那么就会跳转到下载链接 


 var appstore, ua = navigator.userAgent;
  if(ua.match(/Android/i)){ 
   appstore = 'market://search?q=com.singtel.travelbuddy.android';
  }
  if(ua.match(/iphone|ipod|ipad/)){
   appstore = "https://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8&ign-mpt=uo%3D4"; 
  }
  function applink(fail){ 
   return function(){ 
    var clickedAt = +new Date; 
    // During tests on 3g/3gs this timeout fires immediately if less than 500ms. 
    setTimeout(function(){ 
      // To avoid failing on return to MobileSafari, ensure freshness! 
      if (+new Date - clickedAt < 2000){ 
       window.location = fail; 
      } 
    }, 500);  
   }; 
  } 
  $('.icon-download, .btn-download')[0].onclick = applink(appstore);

解决方案二

通过在页面中生成一个隐藏的iframe,iframe的src指向 app 协议,例如 weixin scheme,并监听onerror事件,意思是如果无法解析协议,就会触发onerror事件,但是我尝试了一下,未果。代码如下,可参考一下。

// 页面中有div#iframe-box 用来插入生成的iframe,还是以微信为例

 var ifm = document.createElement('iframe'), isInstalled;
  ifm.style.display = 'none';
  ifm.src = 'wixin://';
  ifm.onload = function(e){
   var e = e || window.event;
   e.preventDefault();
  }
  ifm.onerror = function(){
   //isInstalled = false;
   alert(1);
  }
  document.getElementById('iframe-box').appendChild(ifm);



// 但这时的问题是,iframe的src成功解析到了协议,则会直接跳转,但是解析不到的话,也不会触发error事件,这个还要继续研究


// 可以把上面的代码,放到函数中,然后作为某个按钮的响应函数。

解决方案三

对于ios手机,会有如下写法

<meta name="apple-itunes-app" content="app-id=414478124" />

将上面代码放到head中,根据name也会知道意思,app-id是微信的app-id,用ios手机看会看到提示,andriod比可以,结果自行实验。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript 文章截取部分无损html显示实现代码
May 04 Javascript
juqery 学习之三 选择器 可见性 元素属性
Nov 25 Javascript
jQuery对表单元素的取值和赋值操作代码
May 19 Javascript
thinkphp中常用的系统常量和系统变量
Mar 05 Javascript
jQuery 隐藏和显示 input 默认值示例
Jun 03 Javascript
浅谈javascript函数式编程
Sep 06 Javascript
基于Vue.js实现简单搜索框
Mar 26 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
浅谈Vuex注入Vue生命周期的过程
May 20 Javascript
JS实现简易留言板特效
Dec 23 Javascript
vue数据响应式原理知识点总结
Feb 16 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 Javascript
详谈js中window.location.search的用法和作用
Feb 13 #Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
Feb 13 #Javascript
js获取当前页的URL与window.location.href简单方法
Feb 13 #Javascript
js实现九宫格拼图小游戏
Feb 13 #Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 #Javascript
关于不同页面之间实现参数传递的几种方式讨论
Feb 13 #Javascript
如何用js判断dom是否有存在某class的值
Feb 13 #Javascript
You might like
php explode函数实例代码
2012/02/27 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
php7基于递归实现删除空文件夹的方法示例
2017/06/15 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
asp javascript 实现关闭窗口时保存数据的办法
2007/11/24 Javascript
javascript 单选框,多选框美化代码
2008/08/01 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
JQuery中节点遍历方法实例
2015/05/18 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
js运动应用实例解析
2015/12/28 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
2017/08/25 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
vue 中的 render 函数作用详解
2020/02/28 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python绘制圆柱体的方法
2018/07/02 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
Python必须了解的35个关键词
2020/07/16 Python
python try...finally...的实现方法
2020/11/25 Python
python中time tzset()函数实例用法
2021/02/18 Python
2014年上半年工作自我评价
2014/01/18 职场文书
数控专业毕业生求职信
2014/06/12 职场文书
北京奥运会口号
2014/06/21 职场文书
会计学专业自荐信
2014/06/25 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
环境建议书
2015/02/04 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python