利用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 相关文章推荐
xss文件页面内容读取(解决)
Nov 28 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
jquery进行数组遍历如何跳出当前的each循环
Jun 05 Javascript
jquery中EasyUI实现同步树
Mar 01 Javascript
纯javascript代码实现计算器功能(三种方法)
Sep 07 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
JavaScript 中对象的深拷贝
Dec 04 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
vue props传值失败 输出undefined的解决方法
Sep 11 Javascript
在Vue中获取组件声明时的name属性方法
Sep 12 Javascript
详解js中的原型,原型对象,原型链
Jul 16 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
php+mysql开源XNA 聚合程序发布 下载
2007/07/13 PHP
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
js快速排序的实现代码
2013/12/08 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
详解angularJs指令的3种绑定策略
2017/04/13 Javascript
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
实习自我鉴定范文
2013/10/30 职场文书
大家访活动实施方案
2014/03/10 职场文书
班级口号大全
2014/06/09 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
解除处分决定书
2015/06/25 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
初中思品教学反思
2016/02/20 职场文书
深入理解go slice结构
2021/09/15 Golang
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL