浅谈Html5页面打开app的一些思考


Posted in HTML / CSS onMarch 30, 2020

1. 需求

前段时间开发项目,遇到了一个需求,简单来说,就是我们H5的页面有一个“在App中打开”的按钮,用户点击后,如果用户已经安装app,则直接打开app,如果用户没有安装app,那就跳转到下载app的页面

首先,在我的认知中,H5应该是没有能力检测到某一款app是否有安装的(如果有小伙伴知道如何检测,欢迎评论区告诉我,感谢!),所以我们需要一些技巧来完成判断app是否安装这一过程。

之后的步骤以安卓手机为例子介绍,目前ios9版本之后的系统不需要我们H5做这些判断app是否安装的流程(ios9之后可以通过提供一个通用链接(Universal link),做到没有安装app提示打开苹果应用商城,安装了app则直接跳转打开)

2. 关于scheme协议

scheme协议是一种页面内跳转协议,我们可以通过定制scheme协议,跳转到app中的想要跳转的各个页面。scheme协议是通过url的形式进行跳转的,所以我们H5也可以通过这个url去跳转到app内指定页面,这就是H5打开app的原理。

scheme的url格式类似: [scheme]://[host]/[path]?[query]

3. H5实现在App中打开的两种方法

3.1 单纯使用定时器判断

这种的方法的思路是,首先把我们要跳转的地址设置为与原生App同学一起定义好的scheme的url,之后,设置一个定时器,定时器里执行的逻辑是跳转到下载app页面,这样,如果用户手机没有安装app,就会在一段时间后跳转到下载页面。

核心代码如下:(可以使用iframe完成跳转,但需要考虑iframe是否在ios等设备中被允许)

const schemeUrl = 'xxx'
const downloadUrl = 'XXX'
const wait = 500
try {
    location = schemeUrl
    setTimeout(() => {
        location = downloadUrl
    }, wait)
} catch (e) {
    console.error(e)
}

存在的问题

上述实现方案的问题是,即使成功跳转到App,原先的H5页面也会在定时时间后,跳转到下载页面,这样体验很不好

3.2 使用window的hidden属性判断

这个方法的思路是,如果成功唤起了app,我们的H5页面被置于后台,window.hidden属性会变为true,可以通过这个属性变化来判断app有没有打开,没打开就跳转到下载页面,当然这里也用到定时器

核心代码如下:

function checkOutApp() {
    const schemeUrl = 'xxx'
    const downloadUrl = 'XXX'
    const wait = 1000
    // 是否进入后台
    const hidden = false
    location = schemeUrl
    // 如果一定时间内,页面没有隐藏,则跳转到下载页
    setTimeout(() => {
        if (!hidden) {
            location = downloadUrl
        }
    }, wait)
    // 页面可见性变化事件
    document.addEventListener("visibilitychange", function(){
        if (document.hidden) {
            hidden = true
        }
    });
}

存在的问题

目前一些安卓浏览器,在app存在时,会首先跳出一个确认框,询问用户是否打开app,只有用户同意时,才会跳转app,如果用户始终没有点击确认,最后还是会跳到下载页面,体验不好

4. 一些思考

鉴于上面说到的一些问题,个人觉得可以在交互中增加一个“去下载页面”的交互,如果用户没有安装app,一定时间后,首先提示用户“是否没有安装app,点击去下载”类似的按钮,用户点击跳转到下载页面,这样会不会更好呢。

到此这篇关于浅谈Html5页面打开app的一些思考的文章就介绍到这了,更多相关Html5打开app内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
利用CSS的Sass预处理器(框架)来制作居中效果
Mar 10 HTML / CSS
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
Dec 30 HTML / CSS
推荐10个CSS3 制作的创意下拉菜单效果
Feb 11 HTML / CSS
CSS3实现鼠标悬停显示扩展内容
Aug 24 HTML / CSS
css3媒体查询中device-width和width的区别详解
Mar 27 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
Jul 06 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
Dec 17 HTML / CSS
H5新属性audio音频和video视频的控制详解(推荐)
Dec 09 HTML / CSS
HTML5视频播放插件 video.js介绍
Sep 29 HTML / CSS
前端实现打印图像功能
Aug 27 HTML / CSS
CSS 鼠标选中文字后改变背景色的实现代码
May 21 HTML / CSS
详解HTML5常用的语义化标签
Sep 27 #HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
Mar 26 #HTML / CSS
HTML5 Canvas实现放大镜效果示例
Mar 25 #HTML / CSS
HTML5 图片预加载的示例代码
Mar 25 #HTML / CSS
html2canvas截图空白问题的解决
Mar 24 #HTML / CSS
html5视频常用API接口的实战示例
Mar 20 #HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
Mar 19 #HTML / CSS
You might like
西德产收音机
2021/03/01 无线电
SONY ICF-SW55的电路分析
2021/03/02 无线电
zf框架的校验器InArray使用示例
2014/03/13 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
总结一些js自定义的函数
2006/08/05 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
jQuery插件jquery.kxbdmarquee.js实现无缝滚动效果
2017/02/15 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
python概率计算器实例分析
2015/03/25 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
2019/08/16 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python实时监控logstash日志代码
2020/04/27 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
工作失职检讨书范文
2014/01/16 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
解决thinkphp6(tp6)在状态码500下不报错,或者显示错误“Malformed UTF-8 characters”的问题
2021/04/01 PHP
python Tkinter的简单入门教程
2021/04/11 Python
一文搞懂php的垃圾回收机制
2021/06/18 PHP
php实现自动生成验证码的实例讲解
2021/11/17 PHP