HTML5页面中尝试调起APP功能


Posted in HTML / CSS onSeptember 12, 2017

在市面上经常见到这种功能现如今应该非常普遍了,淘宝H5,知乎H5等等。。。

HTML5页面中尝试调起APP功能 HTML5页面中尝试调起APP功能

点击后会调起APP或者打开下载页面或者直接进行下载。

但是我这里发现知乎的这个功能有点不一样

他的逻辑是先提示我是否打开手机中的知乎APP(浏览器的机制询问用户操作许可),然后接着又弹出下载的提示。

HTML5页面中尝试调起APP功能 HTML5页面中尝试调起APP功能

解决方案URL scheme

URL scheme的方式在IOS和安卓都支持,兼容性较好。

优先使用iframe的方式

伪代码如下:

const iframe = document.createElement('iframe');
iframe.src = 'URL scheme'; // URL scheme的方式跳转
iframe.style.display = 'none';
document.body.appendChild(iframe);

这时候如果在一切环境支持的情况下,就会唤醒APP了。

但是这是理想情况下,更多的是要做兼容处理这快逻辑。

有些系统会拦截iframe的src(这只是造成唤醒APP失败的其中一种原因),因为这个src属性是一个法外hacker,很多漏洞都是利用他造成的。

所以这时候就要判断调APP失败的情况了。

伪代码如下:

const timer = 1000;
setTimeout(function() {
        // 执行成功后移除iframe
    document.body.removeChild(iframe);
    //setTimeout小于2000通常认为是唤起APP失败 
    if (Date.now() - last < 2000) {
            // 执行失败函数
            // 这里需要考虑一下之前知乎遇到的那个问题(浏览器询问导致时间小于2S)
    } else {
           //  执行成功函数
        }
}, timer);

理解:

  • 如果唤起成功,H5页面会被切换到后台,计时器就会延迟。即使用户再从app切换到H5页面,这个时间差必然也是大于2S的。
  • 如果唤起失败,定时器会准时执行(即使会有100ms的延迟也是够了),这时候必然是小于2S的。

在iframe被拦截的情况下,我们可以使用window.location.href = URL scheme来做兼容。

总结

以上所述是小编给大家介绍的HTML5页面中尝试调起APP功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

HTML / CSS 相关文章推荐
css3 旋转按钮 使用CSS3创建一个旋转可变色按钮
Dec 31 HTML / CSS
css3简单练习实现遨游浏览器logo的绘制
Jan 30 HTML / CSS
实例教程 纯CSS3打造非常炫的加载动画效果
Nov 05 HTML / CSS
CSS3 flex布局之快速实现BorderLayout布局
Dec 03 HTML / CSS
CSS3制作皮卡丘动画壁纸的示例
Nov 02 HTML / CSS
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
Jan 31 HTML / CSS
html5文字阴影效果text-shadow使用示例
Jul 25 HTML / CSS
html5实现微信打飞机游戏
Mar 27 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
Apr 10 HTML / CSS
解决Firefox下不支持outerHTML问题代码分享
Jun 04 HTML / CSS
html2 canvas生成清晰的图片实现打印功能
Sep 23 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
Jan 03 HTML / CSS
html5使用canvas实现弹幕功能示例
Sep 11 #HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
Sep 11 #HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
Sep 07 #HTML / CSS
HTML5本地存储和本地数据库实例详解
Sep 05 #HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
Aug 28 #HTML / CSS
HTML5实现可缩放时钟代码
Aug 28 #HTML / CSS
HTML5操作WebSQL数据库的实例代码
Aug 26 #HTML / CSS
You might like
php4的session功能评述(二)
2006/10/09 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
PHP实现微信发红包程序
2015/08/24 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
JS对文本框值的判断示例
2014/03/10 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
js实现统计字符串中特定字符出现个数的方法
2016/08/02 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
详解关于vue-area-linkage走过的坑
2018/06/27 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
keras实现VGG16 CIFAR10数据集方式
2020/07/07 Python
汽车检测与维修专业求职信
2013/10/30 职场文书
督导岗位职责范本
2015/04/10 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
解决MySQL报“too many connections“错误
2022/04/19 MySQL