这不是一篇严格意义上的原创,参考了很多大佬的文章, 下面根据自己的情况做了一下整理。

近两天,接到公司的需求----点击 H5 的购买按钮,跳转到 APP 对应的页面。啊! 一脸懵! 还等啥,赶紧查资料啊。

下面的描述分为两点:

  • js 的判断与跳转
  • URL Scheme 、Universal link 、App link 的区别

通过 js 判断与跳转的思路是这样的

  • 通过 let u = navigator.userAgent 判断浏览器的系统类型及版本信息
  • 通过 u.indexOf() 判断系统为 Android 还是 iOS
  • 如果是 Android 系统,则 u 含有的关键字段为 AndroidLinux
  • 如果是 iOS 系统,则 u 含有的关键字段为 Mac OS X
  • 设置时常为 3s 的定时器,如果可以打开 APP,则打开。如果不行,则 3s 后跳转到 APP 下载链接
  • 我对 iOS 系统做了一个处理,判断系统版本是否小于 9 ,若小于,则通过 URL Scheme 打开APP,否则用 Universal link ( iOS 9.0 以后支持 ) 打开。

上代码:

<!DOCTYPE html>
<html lang="en">
...
<body><div id="box">点击打开app</div>
</body>
<script>document.querySelector('#box').addEventListener('click', function () {// 判断是那种设备let u = navigator.userAgent;console.log(u);var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;   // Android系统或者uc浏览器var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);   // iOS系统// 如果为Android系统if (isAndroid) {window.location.href = " ";    // 直接跳转到App的链接,可以是 scheme 也可以是 App link 链接window.setTimeout(function () {window.location.href = " ";   // 3s后如果不能跳转到 App,则跳转到 App 的下载地址,一般是应用宝的对应的下载地址}, 3000);return;}// ios设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载appios();if (isiOS) {let startIndex = u.indexOf('iPhone OS') + 9;let endIndex = u.indexOf('like Mac OS') - 1;let num = +u.slice(startIndex, endIndex).split('_')[0];  // 计算版本号的前面数值if (num < 9) {window.location.href = " ";   // URL scheme 链接} else {window.location.href = " ";   // universal link 链接}window.setTimeout(function () {window.location.href = " ";   // 3s后如果不能跳转到 App,则跳转到 AppStore 的下载地址}, 3000);return;};})</script></html>

上面代码中有提到 URL scheme、universal link、App link,这三者之间有什么区别呢?

  • 这三个链接都能跳转到 App 对应的页面。当然浏览器是不能判断你是否安装了某个软件的,只能是如果能跳转到 App 对应的页面,那就是你安装了这个 App,如果不能跳转,则在一个时间后作出处理,就是上面写的跳转到 App 下载链接页。
  • URL scheme 必须唯一,不能与其它 App 重名,如支付宝的 scheme 字段为 alipays ,则你的 App 在设置字段的时候就不能用 alipays
  • 如果没有安装 App,URL scheme 不会做任何处理。
  • universal link (通用链接)是 Apple 在 iOS 9 后提出的,就是说一个链接可以打开网址同时也可以打开 App
  • 相对于 URL scheme,universal link 的这个特点就显得更加多变、灵活
  • universal link 必须要跨域,即跳转目标链接的域名与当前视图所在的域名不一样才能跳转
  • 像微信和手机百度是禁用 URL scheme 的,而用 universal link 则完美的解决了这个问题
  • App link 和 URL scheme 的区别不大,相关配置可以在应用宝官网可以看到

用js实现点击链接跳转APP对应页面相关推荐

  1. [Flutter]微信分享并从分享链接跳回APP指定页面

    最近在使用flutter开发APP,flutter实现了一套代码同时生成Android和iOS两个平台的APP,可以实现零基础快速上手APP开发,缩短开发周期.但flutter仍处于较快增长期,版本迭 ...

  2. 点击链接跳转到新页面并显示对应的tab标签页切换

    原理:从页面A跳转到页面B,则在A页面中跳转页面时传值,然后在B页面中写js获取该值并做对应的操作 附:tab标签页的制作链接:https://mp.csdn.net/postedit/1010531 ...

  3. ios开发跳转safari_阻止iOS Web APP中点击链接跳转到Safari 浏览器新标签页

    最近为了更好地接触移动Web 开发狠心购买了一台ipad mini(之前一直都是借同学的,借多了就不好意思了).拿来调试DeveMobile 与EaseMobile 主题 时候发现了不少问题,现在在一 ...

  4. 链接跳转:在本页面跳转

    链接跳转:在本页面跳转 为什么要使用`href="javascript:void(0);"`? `href="javascript:void(0);"`与`hr ...

  5. 链接跳转(本页面跳转)

    href="javascript:void(0);"这个的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址, 而void(0)表示一个空的方法,也就是不执行js函数. 为 ...

  6. HTML点击图片跳转到新页面怎么实现?(示例)

    我们在设计网页开发过程中,"跳转链接"这个需求是最普遍不过了.相信那些对HTML有一定了解的朋友,想要实现点击某个元素然后跳转到新链接新页面的功能,是非常简单的事情.比如点击按钮实 ...

  7. Android中点击链接调起App

    最近工作中的一个需求是点击短信链接则调起App然后完成相关功能逻辑,查阅相关文章完成需求,以此文章来记录Android中点击链接吊起App的实现. 原理 通过使用自定义Scheme方式,修改Schem ...

  8. js判断网页在手机端跳转到移动页面,script怎么写跳转移动端

    js判断网页在手机端跳转到移动页面,script怎么写跳转移动端 js案例: <script>if(/Android|webOS|iPhone|Windows Phone|iPod|Bla ...

  9. H5 引用vue 打开app(如何该手机内有某个app则直接打开app,如果没有则跳转app下载页面)

    H5 引用vue 打开app(如何该手机内有某个app则直接打开app,如果没有则跳转app下载页面) **ps: 一定一定一定一定先向 ios要 ( ios下载地址 和 ios对应的app协议 ), ...

最新文章

  1. 华为不造车,广汽合作智能驾驶
  2. 计算机考到贴吧的试题,2014年全国计算机二级VB上机考试试题七
  3. Java代码总结【1】_查询手机号码归属地
  4. C++ opengl GL_QUAD_STRIP的绘制
  5. mac gcc安装_16_超级小白Mac Pro下安装superset遇见的坑
  6. Regional Proposal的输出到底是什么
  7. struts2 jsp提交对象数据要这么干
  8. 10个新鲜出炉的JQuery插件(ITEye)
  9. 【天梯选拔月赛】经典算法之过河问题+(倒水问题--见链接)
  10. android 极光推送1011,极光推送 · OpenKit使用手册 · 看云
  11. 深信服虚拟服务器设置ip,深信服服务器虚拟化asv操作步骤.pdf
  12. windows家庭中文版升级至专业版
  13. linux进入桌面后CPU狂转,笔记本风扇狂转+CPU调节问题
  14. 分散的无纸记录仪如何通过无线集中实现短信报警
  15. 在kitti数据集与nsh_indoor_outdoor.bag,自己数据集(RS_16)上运行LeGo-LOAM
  16. leetcode oj java Bulls and Cows
  17. java怎么编程class,深入理解Java Class文件格式(一)
  18. python爬虫实例教程-Python网络爬虫实例教程(视频讲解版)
  19. 谷歌自动翻译-谷歌翻译api怎样能打开网页默认自动翻译
  20. MCAD/MCSD课程选择对比

热门文章

  1. 【寒假学习】恋恋有词-考研英语词汇
  2. ACL 2022事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总
  3. APP漏洞导致移动支付隐患重重,未来之路如何走?
  4. tomcat设置https端口时,8443和443区别:
  5. JS标签选择器以及节点操作
  6. Learning Cocos2d-x for WP8(2)——深入刨析Hello World
  7. vb.net 模拟鼠标 失去焦点_健身房模拟器中文版 游戏攻略分享
  8. linux静音,如何在Ubuntu终端中静音/禁用硬件提示音
  9. 万能的APT!编译时注解的妙用
  10. 学习记录-Simpack生成车轮不圆的几种示例