利用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 相关文章推荐
js中匿名函数的N种写法
Sep 08 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
JS中input表单隐藏域及其使用方法
Feb 13 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
基于jQuery实现的单行公告活动轮播效果
Aug 23 jQuery
vue devtools的安装与使用教程
Aug 08 Javascript
axios取消请求的实践记录分享
Sep 26 Javascript
clipboard在vue中的使用的方法示例
Oct 19 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
Jul 28 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 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比较两个绝对时间的大小
2014/01/31 PHP
Yii2框架中日志的使用方法分析
2017/05/22 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
JS随机密码生成算法
2019/09/23 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
Python的词法分析与语法分析
2013/05/18 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Python的requests网络编程包使用教程
2016/07/11 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python中id函数运行方式
2020/07/03 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
社区母亲节活动记录
2014/03/06 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
汽车转让协议书范本
2014/12/07 职场文书
推广普通话主题班会
2015/08/17 职场文书
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python