您现在的位置是:网站首页> 编程资料编程资料
浅谈Html5页面打开app的一些思考Html5跳转到APP指定页面的实现Html5与App的通讯方式详解Html5内唤醒百度、高德APP的实现示例html5唤醒APP小记Html5如何唤起百度地图App的方法html5调用app分享功能示例(WebViewJavascriptBridge)浅谈html5与APP混合开发遇到的问题总结Html5 APP中监听返回事件处理的方法示例使用html5新特性轻松监听任何App自带返回键的示例html5唤起app的方法
2021-08-30
872人已围观
简介 这篇文章主要介绍了浅谈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内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 详解HTML5常用的语义化标签HTML5语义化元素你真的用对了吗HTML5新特性之语义化标签HTML5中语义化 b 和 i 标签HTML5 语义化结构化规范化HTML标签语义化(含H5) 详解HTML5常用的语义化标签浅谈HTML的语义化和一些简单优化浅谈语义化的HTML结构到底有什么好处使用语义化标签去写你的HTML 兼容IE6,7,8HTML标签语义化的介绍
- html5 移动端视频video的android兼容(去除播放控件、全屏)HTML5轻松实现全屏视频背景的示例HTML5在手机端实现视频全屏展示方法
- HTML5 Canvas实现放大镜效果示例canvas离屏技术与放大镜实现代码示例Canvas实现放大镜效果完整案例分析(附代码)
- HTML5 图片预加载的示例代码在HTML里加载摄像头的方法基于HTML代码实现图片碎片化加载功能html5用video标签流式加载的实现传统HTML页面实现模块化加载的方法HTML页面缩小后显示滚动条的示例代码h5页面背景图很长要有滚动条滑动效果的实现HTML5实现直播间评论滚动效果的代码html+css实现滚动到元素位置显示加载动画效果
- html2canvas截图空白问题的解决html2canvas生成的图片偏移不完整的解决方法使用html2canvas实现将html内容写入到canvas中生成图片html2 canvas生成清晰的图片实现打印功能html2canvas.js 实现页面截图html2 canvas svg不能识别的解决方案
- html5视频常用API接口的实战示例HTML5拖拽API经典实例详解HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码你不知道的5个HTML5新功能HTML5拖放API实现自动生成相框功能
- Html5页面上如何禁止手机虚拟键盘弹出html5手机键盘弹出收起的处理
- HTML5 body设置自适应全屏HTML页面自适应宽度的table(表格)html5移动端自适应布局的实现HTML5 textarea高度自适应的两种方案关于html选择框创建占位符的问题
- iframe与window.onload如何使用详解遮罩层 + Iframe实现界面自动显示的示例代码通过iframe监听一个DOM元素大小变化关于解决iframe标签嵌套问题的解决方法iframe跨域的几种常用方法跨域修改iframe页面内容详解iframe在移动端的缩放的示例代码web响应式布局中iframe自适应的方法div被iframe遮住的几种情况及解决方法浅谈Iframe网页内部的导航窗口举例讲解HTML中iframe和frame的区别
- HTML5录音实践总结(Preact)HTML5网页录音和上传到服务器支持PC、Android,支持IOS微信功能html5录音功能实战示例详解HTML5 录音的踩坑之旅
