详解Html5页面实现下载文件(apk、txt等)的三种方式


Posted in HTML / CSS onOctober 22, 2018

需求描述

接到的原始需求是这样的,有一个H5页面,页面中有个“点击下载”的按钮,点击之后,完成下载特定的apk。

大概是下面这样的?:

详解Html5页面实现下载文件(apk、txt等)的三种方式

需求分析

接到需求的时候我偷乐了一下,这个H5页面最大的优点是不在微信中使用(微信好坑,各种限制,基本上从微信浏览器里面实现直接下载apk是不太可能的),如果是在平常的浏览器的话,就简单多了。

功能实现

于是我想到了第一种,点击下载按钮的时候改变location.href。

方法一:

// 我随便找了个apk的下载链接举个例子
window.location.href = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';

拿在浏览器里面试了下,多个安卓机型都可以走通,然后我美滋滋得交付了任务,收拾收拾东西回家。

然后…………

详解Html5页面实现下载文件(apk、txt等)的三种方式

截图中所说的空白页是因为我改变href为apk的下载链接,网页打开的时候会停留在一个空白页,然后一般手机的状态栏上会出现下载apk的进度条。

既然不想出现空白页面的话,那不直接打开一个页面而改成在当前页打开就可以了。

这时候想到iframe,借助iframe可以在原页面打开一个页面。

方法二:

关键代码:

var src = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';
var iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = "javascript: '<script>location.href=\"" + src + "\"<\/script>'";
document.getElementsByTagName('body')[0].appendChild(iframe);

使用iframe的话,既可以实现下载,又可以不重新打开页面,并且,对原页面的布局不会产生任何影响,最后我也是采取这种方案的。

方法三

第三种方法是偶然学到的,既然使用iframe可以,那使用form一定也是可以的,form的action也可以发请求。
于是改写了下第二种方法:

var src = 'http://imtt.dd.qq.com/16891/26747DD8B125A8479AD0C9D22CA47BC9.apk?fsname=com.snda.wifilocating_4.2.91_3211.apk&csr=1bbd';
var form = document.createElement('form');
form.action = src;
document.getElementsByTagName('body')[0].appendChild(form);
form.submit();

以上的代码也可以实现下载apk的需求。

总结

其实第二和第三种方法是扩展发挥了iframe和form的用法,单独来看,我们知道iframe可以在父页面里嵌套子页面,知道form的action可以发请求或者跳转页面,这是很常见的功能,但是不知道它们会被用在下载文件这个需求上,且产生的效果非常好。可见知识还是要融会贯通,举一反三的。

写这篇的时候我去查了下iframe,原来ajax等技术未出现的时候,有段时间业内常用的长轮询的方法竟然就是借助的iframe,有兴趣的也可以研究一下。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
让IE6、IE7、IE8支持CSS3的脚本
Jul 20 HTML / CSS
css3实现一款模仿iphone样式的注册表单
Mar 20 HTML / CSS
CSS3实现多背景模拟动态边框的效果
Nov 08 HTML / CSS
基于CSS3 animation动画属性实现轮播图效果
Sep 12 HTML / CSS
CSS3 transition 实现通知消息轮播条
Oct 14 HTML / CSS
CSS3 实现倒计时效果
Nov 25 HTML / CSS
HTML5新特性之用SVG绘制微信logo
Feb 03 HTML / CSS
完美解决IE8下不兼容rgba()的问题
Mar 31 HTML / CSS
Canvas多边形绘制的实现方法
Aug 05 HTML / CSS
在html页面中取得session中的值的方法
Aug 11 HTML / CSS
浅析HTML5页面元素及属性
Jan 20 HTML / CSS
完美实现CSS垂直居中的11种方法
Mar 27 HTML / CSS
html5 http的轮询和Websocket原理
Oct 19 #HTML / CSS
canvas实现扭蛋机动画效果的示例代码
Oct 17 #HTML / CSS
浅谈HTML5中dialog元素尝鲜
Oct 15 #HTML / CSS
canvas进阶之如何画出平滑的曲线
Oct 15 #HTML / CSS
iframe在移动端的缩放的示例代码
Oct 12 #HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
Oct 11 #HTML / CSS
HTML5实现签到 功能
Oct 09 #HTML / CSS
You might like
PHP自定义函数收代码
2010/08/01 PHP
PHP 万年历实现代码
2012/10/18 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
PHP Cli 模式设置进程名称的方法
2019/06/12 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
2020/02/01 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
Django框架组成结构、基本概念与文件功能分析
2019/07/30 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
Python学习笔记之装饰器
2020/08/06 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
养殖人员的创业计划书范文
2013/12/26 职场文书
物业工程部岗位职责
2015/02/11 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
Python实现学生管理系统(面向对象版)
2021/06/24 Python
python playwright 自动等待和断言详解
2021/11/27 Python
MySQL如何使备份得数据保持一致
2022/05/02 MySQL