html5开发的app(浅谈Html5页面打开app的一些思考)
html5开发的app
浅谈Html5页面打开app的一些思考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内容请搜索开心学习网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持开心学习网!
- 前端app开发适配消息栏(AmazeUI 导航条的实现示例)
- uniapp 全局变量(如何在uniapp项目中使用mqtt)
- uni app开发教程(uniapp+Html5端实现PC端适配)
- react app框架(浅谈React原生APP更新)
- 前端app开发适配消息栏(amazeui页面校验功能的实现代码)
- JS中call和apply区别
- computer browser服务启动后停止(用户IIS APPPOOLDefaultAppPool登录失败的解决方法)
- xm文档使用教程(xmapp环境搭建注意事项说明)
- h5开发app缺点(H5唤醒APP实现方法及注意点总结)
- uni app 小程序全局样式没法用(uniapp封装小程序雷达图组件的完整代码)
- laravel 快速开发api技巧(Laravel5.4简单实现app接口Api Token认证方法)
- ih5如何点击按钮跳转至网页(HTML5跳转小程序wx-open-launch-weapp的示例代码)
- vue前端搜索功能如何实现(使用Vue3+Vant组件实现App搜索历史记录功能示例代码)
- app云服务器(为什么APP开发首选云服务器?)
- asp.net中Server.MapPath的使用
- html5app开发用什么平台(Html5与App的通讯方式详解)
- 南宋志南和尚绝句 杨柳风似庙中来(南宋志南和尚绝句)
- 今天要穿什么颜色(今天要穿什么颜色的衣服最吉利)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
热门推荐
- 对mysql性能优化的看法(聊聊MySQL的COUNT的性能,看看怎么最快?)
- laravel 表单验证图片(Laravel 自动生成验证的实例讲解:login / logout)
- html5怎么设置左边input(HTML5中input输入框默认提示文字向左向右移动的示例代码)
- html5基本标签详解(HTML5 通过Vedio标签实现视频循环播放的示例代码)
- vue项目部署到服务器的nginx(Nginx部署vue项目和配置代理的问题解析)
- 网页嵌入百度UEditor富文本编辑器
- server2008对前端有啥用(MyWebServer好不好?MyWebServer WEB服务器软件介绍)
- 详解DB2 sqlstate 57016 SQLCODE=-668 原因码 "7"错误的快速解决办法(详解DB2 sqlstate 57016 SQLCODE=-668 原因码 "7"错误的快速解决办法)
- html结合css实现简单网页(基于HTML+CSS实现网页滑动门效果)
- pyqt5数据模型(PyQt5实现简单数据标注工具)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9