利用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 相关文章推荐
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
Oct 17 Javascript
JavaScrip单线程引擎工作原理分析
Sep 04 Javascript
关于jQuery参考实例2.0 用jQuery选择元素
Apr 07 Javascript
jQuery父级以及同级元素查找介绍
Sep 04 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
JavaScript实现twitter puddles算法实例
Dec 06 Javascript
javascript清空table表格的方法
May 14 Javascript
浅析Bootstrap组件之面板组件
May 04 Javascript
JS原型对象的创建方法详解
Jun 16 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
Dec 06 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
详解React 元素渲染
Jul 07 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
图形数字验证代码
2006/10/09 PHP
PHP反射机制用法实例
2014/08/28 PHP
PHP上传文件时自动分配路径的方法
2015/01/09 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
PHP5.6读写excel表格文件操作示例
2019/02/26 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
Bootstrap源码解读下拉菜单(4)
2016/12/23 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
python中global用法实例分析
2015/04/30 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
python 实现12bit灰度图像映射到8bit显示的方法
2019/07/08 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
基于python3生成标签云代码解析
2020/02/18 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python pandas利用fillna方法实现部分自动填充功能
2020/03/16 Python
Django分组聚合查询实例分享
2020/04/29 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
高校辅导员推荐信范文
2013/12/25 职场文书
优秀员工推荐信
2014/05/10 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
宝宝满月祝酒词
2015/08/10 职场文书