浅谈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 相关文章推荐
css3动画事件—webkitAnimationEnd与计时器time事件
Jan 31 HTML / CSS
css3中transition属性详解
Sep 02 HTML / CSS
纯CSS3实现8组超炫酷鼠标滑过图片动画
Mar 16 HTML / CSS
利用CSS3伪元素实现逐渐发光的方格边框
May 07 HTML / CSS
html5 利用canvas手写签名并保存的实现方法
Jul 12 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(一)
Jan 21 HTML / CSS
24个canvas基础知识小结
Dec 17 HTML / CSS
HTML页面中添加Canvas标签示例
Jan 01 HTML / CSS
分享29个基于Bootstrap的HTML5响应式网页设计模板
Nov 19 HTML / CSS
HTML5 Canvas的常用线条属性值总结
Mar 17 HTML / CSS
html5移动端价格输入键盘的实现
Sep 16 HTML / CSS
Canvas如何做个雪花屏版404的实现
Sep 25 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
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
文字幻灯片
2006/06/26 Javascript
List all the Databases on a SQL Server
2007/06/21 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
Vue2几种常见开局方式详解
2017/09/09 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
django解决订单并发问题【推荐】
2019/07/31 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
android面试问题与答案
2016/12/27 面试题
物流司机岗位职责
2013/12/28 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
教师党员承诺书2015
2015/01/21 职场文书
任命通知范文
2015/04/21 职场文书
教师思想工作总结2015
2015/05/13 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
python编写五子棋游戏
2021/05/25 Python