利用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 相关文章推荐
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 Javascript
jQueryUI中的datepicker使用方法详解
May 25 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
AngularJs Modules详解及示例代码
Sep 01 Javascript
Javascript动画效果(4)
Oct 11 Javascript
微信小程序 增、删、改、查操作实例详解
Jan 13 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
Jan 19 Javascript
解决浏览器会自动填充密码的问题
Apr 28 Javascript
vue-cli中打包图片路径错误的解决方法
Oct 26 Javascript
如何基于JavaScript判断图片是否加载完成
Dec 28 Javascript
vue实现从外部修改组件内部的变量的值
Jul 30 Javascript
vue+openlayers绘制省市边界线
Dec 24 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
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
个人写的PHP验证码生成类分享
2014/08/21 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
js实现简单登录功能的实例代码
2013/11/09 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
[01:00:17]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第二场 1月25日
2021/03/11 DOTA
基于Python的身份证号码自动生成程序
2014/08/15 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python实现的科学计算器功能示例
2017/08/04 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
详解Django配置JWT认证方式
2020/05/09 Python
中专自我鉴定范文
2013/10/16 职场文书
50岁生日感言
2014/01/23 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
小学毕业感言300字
2014/02/19 职场文书
出国留学计划书
2014/04/27 职场文书
社区护士演讲稿
2014/08/27 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
家长学校教学计划
2015/01/19 职场文书
Python实现为PDF去除水印的示例代码
2022/04/03 Python
JavaScript实现音乐播放器
2022/08/14 Javascript