有需求说要通过页面按钮唤醒app,或者手机上没有这款app跳转到商店,然后刚开始也是查了资料的,结果发现一头雾水,不过最后还是捣鼓出来了,当然也参考了前人分享的经验,下面我就将方法整理一下:

首先明确一下目的,是要在分享出去的html页面,通过js操作唤醒app或者打开商店,那么第一步就应该先判断当前的环境,这里我附上详细的判断方法,通用的

var browser = {

versions: function() {

var u = navigator.userAgent,

app = navigator.appVersion;

return {

trident: u.indexOf('Trident') > -1,

presto: u.indexOf('Presto') > -1,

webKit: u.indexOf('AppleWebKit') > -1,

gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,

mobile: !!u.match(/AppleWebKit.*Mobile.*/),

ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),

android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,

iPhone: u.indexOf('iPhone') > -1,

iPad: u.indexOf('iPad') > -1,

webApp: u.indexOf('Safari') == -1,

souyue: u.indexOf('souyue') > -1,

superapp: u.indexOf('superapp') > -1,

weixin:u.toLowerCase().indexOf('micromessenger') > -1,

Safari:u.indexOf('Safari') > -1

};

}(),

language: (navigator.browserLanguage || navigator.language).toLowerCase()

};

这里用到两个判断,一个ios一个安卓

if (browser.versions.ios) {

//你的代码

}else if (browser.versions.android){

//你的代码

}

那么接下来就应该判断当前手机上是否有安装某款应用,但是要知道js是无法判断手机上是否安装了哪款app的,所以有app打开app,没有app跳转到商店就可以这么做,js打开ios系统app的方法是这样的,拿淘宝为例:

taobao://

那么同理安卓的方法也是一样的,只不过打开app的协议不同,这个对应的打开app的协议是你们ios和安卓开发的小伙伴提供给你的,接下来的原理就是尝试发起打开app的请求,如果有提示是否在某款app中打开,那就可以直接打开了,如果打不开那么我们就要做另外一件事情了

if (browser.versions.ios) {

window.location.href = "taobao://";

setTimeout(function(){

window.location.href = "你的app在商店中的地址";

window.location.href = "你的app在商店中的地址";  //为什么要加两遍我下面会说到

},2000)

}else if (browser.versions.android){

window.location.href = "taobao://**";

setTimeout(function(){

window.location.href = "你的app的下载地址";

},2000)

}

当然为什么要加定时器,相信大家也都知道,因为打开app是需要时间的,而js代码瞬间就执行完毕了,当然这里还有几个坑,ios系统第一次window.location.href尝试打开app有时候会弹一下是否在某款app中打开之后马上跳到商店,为了解决这个问题我加了两遍window.location.href。

最新文章

  1. python2.7和python3共存
  2. zz A list of open source C++ libraries
  3. 转-JS子窗口创建父窗口操作父窗口
  4. 让chrome浏览器变成在线编辑器
  5. (转)浅析Mysql的my.ini文件
  6. lib 和 dll 的区别、生成以及使用详解
  7. javascript高级编程笔记04(基本概念)
  8. ubuntu下一次网络流量危机
  9. linux系统文件属性
  10. TransactionScope
  11. CF Educational Codeforces Round 10 D. Nested Segments 离散化+树状数组
  12. 【Alpha阶段】第一次Scrum Meeting!
  13. 201521123095 《Java程序设计》第9周学习总结
  14. access窗体主体居中
  15. windows 安装touch指令
  16. 使用mybatis开发dao方法
  17. [Kubernetes]CentOS7下Etcd集群搭建
  18. 求标准分sql
  19. AT3611 Tree MST 点分治+最小生成树
  20. 【Python全栈-CSS】CSS入门

热门文章

  1. Ndk开发笔记
  2. STM32跑马灯
  3. Parallel and Perpendicular
  4. R环境中的工作空间(workspace)
  5. js 四种调用方式 Method Invocation Pattern
  6. Can JavaScript connect with MySQL? 浏览器控制台的js采集数据结果持久化存储
  7. [NHibernate] 入门实例 NHibernate 3.3 GA + VS2010 +MySQL
  8. touch事件的分发机制
  9. [置顶] Snow的追寻
  10. PCB SQL SERVER 邮箱配置与发邮件