时间:2021-05-08
h5唤起app这种需求是常见的。在移动为王的时代,h5在app导流上发挥着重要的作用。
目前我们采用的唤起方式是url scheme(iOS,Android平台都支持),只需原生APP开发时注册scheme, 那么用户点击到此类链接时,会自动跳到APP。
三种唤起方案
iframe
var last = Date.now(), doc = window.document, ifr = doc.createElement('iframe');//创建一个隐藏的iframeifr.src = nativeUrl;ifr.style.cssText = 'display:none;border:0;width:0;height:0;';doc.body.appendChild(ifr);setTimeout(function() { doc.body.removeChild(ifr); //setTimeout回小于2000一般为唤起失败 if (Date.now() - last < 2000) { if (typeof onFail == 'function') { onFail(); } else { //弹窗提示或下载处理等 } } else { if (typeof onSuccess == 'function') { onSuccess(); } }}, 1000);iframe方案的唤起原理是: 程序切换到后台时,计时器会被推迟(计时器不准的又一种情况)。如果app被唤醒那么网页必然就进入了后台,如果用户从app切回来,那么时间一般会超过2s;若app没有被唤起,那么网页不会进入后台,setTimeout基本准时触发,那么时间不会超过2s。
window.location.href直接跳转
window.location.href = nativeUrl;a标签唤起
<a href="nativeUrl">唤起app</a>三种唤起方案的浏览器测试
iframe唤起app测试结果
window.location.href唤起app测试结果
a标签唤起app测试结果
iframe和window.location.href唤起对比
iframe、window.location.href和a标签唤起三者对比
测试结果分析
首先测试的机型和浏览器有限,上述结果仅作参考.
对比iframe唤起和location.href,我们可以发现:
通过上述对比分析,Android使用iframe唤起,ios采用window.location.href唤起更合适一点。
进入页面直接唤起和事件驱动唤起的区别
这两种唤起场景在Android中有明显的区别,无论是iframe的方式唤起还是location.href,以小米1s的chrome为例:
<a id="goApp" href="javascript:void(0);">点我打开APP</a>绑定事件 人工驱动唤起:
//成功唤起window.onload = function () { $('#goApp').on("click", function () { window.lib.callapp("nativeUrl");//iframe //window.location.href = nativeUrl; });};进入页面直接唤起:
//唤起失败window.onload = function () { window.lib.callapp("nativeUrl");//iframe //window.location.href = nativeUrl;};绑定事件,js唤起
//唤起失败window.onload = function () { $('#goApp').on("click", function () { window.lib.callapp("nativeUrl");//iframe //window.location.href = nativeUrl; }); $('#goApp).trigger('click');};原本我以为$('#goApp).trigger('click');的方式和人工点击是一样的,而实际表现是,js触发事件的表现和页面直接跳转一样无效。
从参考的博文中看到 Android平台和各个app厂商差异很大,比如Chrome从25及以后就不再支持通过js触发(非用户点击),设置iframe src地址等来触发scheme跳转。所以js触发和直接用户点击区别还是很大的,跟音频播放的限制异曲同工吧。
最后
经过上述的测试和分析,基本敲定ios用window.location.href的方式唤起比较合适,Android用iframe唤起比较合适。我们在使用iframe唤起时,一般对唤起失败的处理是直接下载,但是这里就有一个问题,就是浏览器无法检测到唤起是否成功,即,如果我唤起成功后返回浏览器,浏览器还是会弹出下载信息,这个体验很差。当然我们也需要处理一些成功或失败的回调函数,说不定我们的场景只需要唤起而并不需要失败后的下载呢。
关于使用location.href唤起iphone手机上的原生app,跳转中间页的处理方式可能也比当前页直接处理更好一点。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
HTML5是一个革命性的升级,使用HTML5之后,之前只能下载到本地打开的PC软件或手机APP,现在基本上都能搬到浏览器中来运行了。总结来说,HTML5,或者“
未来的网页将是html5的天下如今html3将渐渐远离我们的视线,取尔代之的将会是html5。什么是html5,html5有什么优势?HTML5是用于取代199
如何用HTML5制作网页?HTML5和html有什么区别?和小编一起来了解一下吧。 HTML5和html有什么区别? 首先,用HTML5表达什么?Fir
微信的第三方应用发展的如火如荼,借助HTML5技术,能够实现很多原生App应用所具备的功能。很多人认为通过HTML5利用微信公众号可以渐渐地取代原生App应用。
HTML5是HTML标准的下一个版本。越来越多的程序员开始HTML5来构建网站。如果你同时使用HTML4和HTML5的话,你会发现用HTML5从头构建,比从HT