html5唤起app的方法

h5唤起app这种需求是常见的。在移动为王的时代,h5在app导流上发挥着重要的作用。目前我们采用的唤起方式是url scheme(iOS,Android平台都支持),只需原生APP开发时注册scheme, 那么用户点击到此类链接时,会自动跳到APP。

三种唤起方案

iframe

var last = Date.now(),
    doc = window.document,
    ifr = doc.createElement('iframe');

//创建一个隐藏的iframe
ifr.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>

三种唤起方案的浏览器测试

  1. X表示唤起失败,√表示唤起成功

  2. 红色标记表示进入页面直接唤起,绿色表示人工事件操作后唤起

  3. ios测试机:iphone 6p;android测试机:小米1s

iframe唤起app测试结果

window.location.href唤起app测试结果

a标签唤起app测试结果

iframe和window.location.href唤起对比

iframe、window.location.href和a标签唤起三者对比

测试结果分析

首先测试的机型和浏览器有限,上述结果仅作参考.

对比iframe唤起和location.href,我们可以发现:

  1. 对于ios来说,location.href跳转更合适,因为这种方式可以在Safari中成功唤起app。Safari作为iphone默认浏览器其重要性就不用多说了,而对于微信和qq客户端,ios中这两种方式都没有什么卵用==

  2. 对于Android来说,在进入页面直接唤起的情况下,iframe和location.href是一样的,但是如果是事件驱动的唤起,iframe唤起的表现比location.href要更好一点。

  3. 通过测试可以发现,进入页面直接唤起和事件驱动的唤起,对于很多浏览器,两者的表现是不同的,简单来说,直接唤起的失败更多。

通过上述对比分析,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,跳转中间页的处理方式可能也比当前页直接处理更好一点。

以上内容就是html5唤起app的方法,希望对大家有帮助。

相关推荐:

HTML5的新增了哪些标签元素

几个很好用的HTML5移动开发框架

浅谈HTML5的未来发展

以上就是html5唤起app的方法的详细内容,更多请关注双恒网络其它相关文章!

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
9.本站默认解压密码为:www.sudo1.com
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站信息来自网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!

云资源网 » html5唤起app的方法

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载完但解压或打开不了?
最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。 若排除这种情况,可在对应资源底部留言,或 联络我们.。
你们有qq群吗怎么加入?
当然有的,如果你是帝国cms、易优cms、和pbootcms系统的爱好者你可以加入我们的QQ千人交流群https://sudo1.com/page-qun.html。
  • 会员数(个)
  • 12275资源数(个)
  •        
  • 资源(G)
  •        
  • 今日下载
  • 1364稳定运行(天)

提供最优质的资源集合

立即查看 了解详情