利用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 相关文章推荐
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
再谈Javascript中的异步以及如何异步
Aug 19 Javascript
jquery css实现邮箱自动补全
Nov 14 Javascript
js 轮播效果实例分享
Dec 28 Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
May 26 Javascript
Vue.js获取被选择的option的value和text值方法
Aug 24 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 Javascript
Vue利用localStorage本地缓存使页面刷新验证码不清零功能的实现
Sep 04 Javascript
详解vue实现坐标拾取器功能示例
Nov 18 Vue.js
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 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
图解上海144收音机
2021/03/02 无线电
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
JavaScript递归算法生成树形菜单
2017/08/15 Javascript
ionic3 懒加载
2017/08/16 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python3抓取中文网页的方法
2015/07/28 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Django使用httpresponse返回用户头像实例代码
2018/01/26 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
利用nohup来开启python文件的方法
2019/01/14 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python实现测试工具(一)——命令行发送get请求
2020/10/19 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
CHRONEXT英国:您的首选奢华腕表目的地
2020/03/30 全球购物
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2014年财务科工作总结
2014/11/11 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
python多线程方法详解
2022/01/18 Python