利用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 相关文章推荐
Mootools 1.2教程 设置和获取样式表属性
Sep 15 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
JavaScript参数个数可变的函数举例说明
Oct 10 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
AngularJS学习笔记之ng-options指令
Jun 16 Javascript
纯javascript制作日历控件
Jul 17 Javascript
js实现新浪微博首页效果
Oct 16 Javascript
jQuery插件开发汇总
May 15 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
Jun 24 Javascript
Angular2搜索和重置按钮过场动画
May 24 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 Javascript
vue 实现element-ui中的加载中状态
Nov 11 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
Terran兵种介绍
2020/03/14 星际争霸
一个PHP二维数组排序的函数分享
2014/01/17 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
Python中的进程分支fork和exec详解
2015/04/11 Python
python实现k-means聚类算法
2018/02/23 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
机电工程专业应届生求职信
2013/10/03 职场文书
机械专业应届生求职信
2013/12/12 职场文书
人事部专员岗位职责
2014/03/04 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
校庆接待方案
2014/03/18 职场文书
劲霸男装广告词
2014/03/21 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
行政专员求职信范文
2014/05/03 职场文书
乡镇党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
2014年政风行风工作总结
2014/11/22 职场文书
英文产品推荐信
2015/03/27 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js