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五个技巧给你的网站带来出色的效果
Apr 02 HTML / CSS
CSS3 完美实现圆角效果
Jul 13 HTML / CSS
详解background属性的8个属性值(面试题)
Nov 02 HTML / CSS
HTML5 Canvas API中drawImage()方法的使用实例
Mar 25 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
Jan 30 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
Jan 31 HTML / CSS
详解HTML5中的picture元素响应式处理图片
Jan 03 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
Jul 12 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
Sep 09 HTML / CSS
HTML5自定义元素播放焦点图动画的实现
Sep 25 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
Mar 19 HTML / CSS
HTML5基础学习之文本标签控制
Mar 25 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
强烈推荐:php.ini中文版(1)
2006/10/09 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP中捕获超时事件的方法实例
2015/02/12 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
JavaScript参数个数可变的函数举例说明
2014/10/10 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
vue.js 2.0实现简单分页效果
2019/07/29 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
基于python代码批量处理图片resize
2020/06/04 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2015/09/07 面试题
销售类求职信
2014/06/13 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
工商行政处罚决定书
2015/06/24 职场文书
详解Vue3使用axios的配置教程
2022/04/29 Vue.js