手机浏览器通过Scheme跳转APP,兼容各种手机浏览器

news/2024/11/30 15:49:18/

 一个比较完整的产品线,必定有APP和网站,另外还有微信公众号网页和小程序。那么有一个比较常见的需求就是在手机浏览器内打开APP,实现起来也比较简单,只要APP配置的有URLScheme即可。但是因为无法判断是否安装APP,所有只能尝试去打开APP,如果打不开则跳转到APP下载页面。另外手机浏览器的类型很多,各个浏览器显示的效果也不一样,一直无法找到一个完全兼容所有浏览器的方法,没有完美的解决方案。

  打开APP的操作就是链接打开 location.href = "scheme://",APP未安装的时候链接打开有的时候会跳转到错误页面,所以可以使用iframe来跳转,保证浏览器链接一直在当前页面 document.querySelector("#iframeId").src = "scheme://",打开APP大部分手机浏览器会弹窗是否允许跳转打开。

  打开APP失败时跳转到下载,因为无法判断打开是否成功,所以通过setTimeout两秒后跳转下载地址。下载地址ios:https://itunes.apple.com/cn/app/要跳转的APP的appid,安卓下载地址自定义即可,放到自己的服务器地址上边,浏览器打开.apk地址自动提示下载。

测试了流行的几个手机浏览器,总结一下需要注意以下几点:

  1. 微信公众号网页打开APP,微信已经开放了接口,在微信开放平台配置域名代码里面添加按钮后即可跳转,小程序打开APP也有相关文档说明。https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Resource_Center_Homepage.html

  2. 安卓下的谷歌浏览器无法通过iframe的方式打开,必需使用location.href。

  3. 手机百度浏览器不支持打开APP,这个是百度自己的问题,不允许打开APP。另外百度浏览器中页面的按钮文字含有“下载”或“打开”的时候,按钮会被百度给隐藏掉(好霸道),所以只能换下文字或者加空格“下 载”“打 开”。

  4. UC浏览器页面初始化后直接通过js打开APP打开不了,需要点击实际的按钮触发打开。

最终实现的方式如下:

1. 通过js判断浏览器类型 

 var Navigator = navigator.userAgent;var ifChrome = Navigator.match(/Chrome/i) != null && Navigator.match(/Version\/\d+\.\d+(\.\d+)?\sChrome\//i) == null ? true : false; //判断是不是谷歌浏览器var ifAndroid = (Navigator.match(/(Android);?[\s\/]+([\d.]+)?/)) ? true : false; //判断是不是安卓var ifIos = /(iPhone|iPad|iPod|iOS)/i.test(Navigator); //判断是不是iosvar ifUCorBaidu = /(UCBrowser|baiduboxapp)/i.test(Navigator); //判断是不是UC或百度浏览器var openUrl = "scheme://";var androidDownUrl = "https://xxx/1.0.0.apk";var iosDownUrl = "https://itunes.apple.com/cn/app/要跳转的APP的appid";

2. 分别操作

<div class="buttons" @click="openApp">{{text}}</div><iframe id="myDown" style="width: 1px;height: 1px;position: absolute;z-index: -1;top:10px"></iframe>if(ifUCorBaidu) {this.text = '点 击 下 载 APP';} else {this.text = '正在跳转中';openApp();} //这里使用了vue,也可以用其他方式修改按钮文字function openApp() {window.onblur = function() {if(myTimeout) {clearTimeout(myTimeout);}
}; //onblur可以检测到页面消失,这时候一般已经打开了APP,就清除掉下载定时器,不跳出下载链接。if (ifIos) {if(ifUCorBaidu) {window.location.href = iosDownUrl; //ios跳到App Store也可以打开APP,所以直接打开就好了。} else {window.location.href = openUrl;var myTimeout = setTimeout(function () {window.location.href = iosDownUrl;}, 1000);} else{if(ifChrome && ifAndroid) {setTimeout(function() {window.location.href = openUrl;}, 50)} else {document.querySelector("#myDown").src = openUrl;}var loadDateTime = Date.now();setTimeout(function() {var myTimeout = setTimeout(function() {var timeOutDateTime = Date.now();if (loadDateTime && (timeOutDateTime - loadDateTime) < (1500 + 200)) {window.location.href = androidDownUrl} //这里的操作跟直接setTimeout是一样的}, 1500);}, 100)}}}

经过测试 百度浏览器,QQ浏览器,UC浏览器,360浏览器,搜狗浏览器,夸克浏览器,Safari浏览器效果都还算理想。


http://www.ppmy.cn/news/382744.html

相关文章

小米无法播放html5,[html5]关于H5视频播放器常见的一些问题汇总

m3u8文件是指UTF-8编码格式的M3U文件。M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的路径进行播放。 简单说,播放器通过m3u8文件可以找到要播的具体音视频。 格式如下是ts流文件 #EXTM3U #EXT-X-VERSION:3 #EXT-…

小米团队又一力作,极简极速

哈喽&#xff0c;大家好&#xff0c;我是小北。一个资深的互联网黑科技软件玩家&#xff0c;致力于为大家分享各种黑科技软件、高效率工具。 之前小北给大家分享过小米出品的证件照神器&#xff1a; 小米出品 | 证件照神器&#xff0c;免费无广告&#xff0c;绝对黑科技 没有用…

手机浏览器的扫一扫功能在哪里,有什么作用

手机浏览器可以用来浏览网页、看新闻、看视频&#xff0c;还能搜索问题&#xff0c;在我们的工作生活中浏览器占据着非常重要的位置。手机浏览器除了这些作用&#xff0c;其实它隐藏着其他功能&#xff0c;比如&#xff1a;扫一扫。扫一扫可不只是用来扫码&#xff0c;通过扫一…

小米路由器显示网络未连接到服务器,小米路由器异常排查的常见问题与使用技巧...

小米路由器客户端是一款刚推出的小米专用路由器辅助工具,这款软件的功能非常强大,该软件支持用手机遥控小米路由和用户的电脑,支持自定义wifi名称,支持上传下载文件到电脑中,让你更方面管理自己的wifi网络,是一款非常不错的软件。今天 小编给大家带来的是小米路由器异常排…

android 浏览器横屏,2013安卓平台浏览器横屏

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2013接近尾声了&#xff0c;安卓平台的浏览器有哪些格局和变化呢&#xff1f; 2013优秀浏览器作品点评(排名不分先后)&#xff1a; UC浏览器&#xff0c;塞班时代浏览器的王者&#xff0c;自从安卓和苹果系统兴起后&#xff0c;又…

默认浏览器怎么更改为别的浏览器,这2个方法很简单

我们在电脑上设置默认浏览器后&#xff0c;点击别人发过来的网址链接&#xff0c;就是用默认浏览器打开的。有些人不喜欢一些浏览器&#xff0c;想把之前默认浏览器更改为别的浏览器&#xff0c;那么&#xff0c;要怎么去设置默认浏览器成为自己喜欢的浏览器呢&#xff1f;下面…

手机版浏览器f12_小科普 | 如何用浏览器的F12装逼?

大家都知道,有时候B站专栏里的文字是不能选取更没法复制的,有时候提供了方便的网站链接、却要手动打,岂不是非常累 (当然初衷 是为了版权保护),那有没有什么办法能复制B站专栏文字呢? ▌复制不能复制的文字 之前也给大家带来过用电脑访问手机版网页的方法(戳这里),就用到…

解决新版edge浏览器(109版本)无法正常使用

1、前言 在我从老家到北京后&#xff0c;发现电脑的edge浏览器突然无法正常使用了。一直显示无法访问此网站某网站已拒绝访问或不能连续正常使用edge浏览器&#xff08;刚开始还可以正常使用&#xff0c;过几分钟就挂了&#xff09; 2、分析问题 刚开始我以为只是电脑卡了&…