浅谈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 mask遮罩实现一些特效
Oct 24 HTML / CSS
纯CSS3发光分享按钮的实现教程
Sep 06 HTML / CSS
CSS3让登陆面板3D旋转起来
May 03 HTML / CSS
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
May 09 HTML / CSS
老生常谈CSS中的长度单位
Jun 27 HTML / CSS
利用CSS3实现开门效果实例源码
Aug 22 HTML / CSS
css3实现多个元素依次显示效果
Dec 12 HTML / CSS
css3实现背景动态渐变效果
Dec 10 HTML / CSS
如何用border-image实现文字气泡边框的示例代码
Jan 21 HTML / CSS
css3通过scale()、rotate()实现放大、旋转
Mar 19 HTML / CSS
CSS3中引入多种自定义字体font-face
Jun 12 HTML / CSS
html5+css3气泡组件的实现
Nov 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
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php 文件上传类代码
2011/08/06 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php的常量和变量实例详解
2017/06/27 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
javascript dom 操作详解 js加强
2009/07/13 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
Javascript模拟加速运动与减速运动代码分享
2014/12/11 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
解决PyCharm同目录下导入模块会报错的问题
2018/10/13 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
django和vue实现数据交互的方法
2019/08/21 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
python实现在线翻译
2020/06/18 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
建筑工程技术应届生求职信
2013/11/17 职场文书
积极分子思想汇报
2014/01/04 职场文书
小区停车场管理制度
2014/01/27 职场文书
销售人员获奖感言
2014/02/05 职场文书
行政求职信
2014/07/04 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android