利用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 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
javascript 写类方式之五
Jul 05 Javascript
jquery简单的拖动效果实现原理及示例
Jul 26 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 Javascript
JS实现的抛物线运动效果示例
Jan 30 Javascript
react 创建单例组件的方法
Apr 26 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
Nov 05 Javascript
关于vue状态过渡transition不起作用的原因解决
Apr 09 Javascript
解决vue init webpack 下载依赖卡住不动的问题
Nov 09 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
详谈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
短波问题解答
2021/02/28 无线电
php清除和销毁session的方法分析
2015/03/19 PHP
帝国cms常用标签汇总
2015/07/06 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
修改file按钮的默认样式实现代码
2013/04/23 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
centos系统升级python 2.7.3
2014/07/03 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python操作MongoDB详解及实例
2017/05/18 Python
利用Python破解斗地主残局详解
2017/06/30 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
python3实现点餐系统
2019/01/24 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
Python中的整除和取模实例
2020/06/03 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
小学语文国培感言
2014/03/04 职场文书
意向书范文
2014/03/31 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
实习指导教师评语
2014/12/30 职场文书
爱情保证书
2015/01/17 职场文书
歌剧魅影观后感
2015/06/05 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
销售口号霸气押韵
2015/12/24 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
spring boot实现文件上传
2022/08/14 Java/Android