For*_*vin 19 html javascript iframe download
我正在编写一个生成html文件的小程序,并使用默认浏览器打开它以启动多个下载.
我不想为每次下载打开一个选项卡/窗口,因此为下载创建隐藏的iframe似乎是一个很好的解决方案.
我正在使用onloadiframe来查明每个下载的下载提示是否已经显示.但是,这种方法在Internet Explorer中似乎非常不可靠.
所以我想知道是否有办法解决这个问题或者更好的方法?
(请不要图书馆.)
这是我的html/js代码:
<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html><head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
<title>Downloads</title>
<script>
"use strict";
var downloadsInfo = {
"http://download-installer.cdn.mozilla.net/pub/firefox/releases/26.0/win32/en-US/Firefox%20Setup%2026.0.exe":"Status: Connecting",
"http://download.piriform.com/ccsetup410.exe":"Status: Connecting"
};
var i = 0;
var iv = setInterval(function() {
i = ++i % 4;
var j = 0;
var finished = true;
for (var key in downloadsInfo) {
var value = downloadsInfo[key];
if (value != "Status: Download Started!") {
value = value+Array(i+1).join(".");
finished = false;
}
document.getElementsByTagName("div")[j].innerHTML = key+"<br/>"+value;
j = j+1;
}
if (finished) {
alert('Done! You can close this window/tab now.');
clearInterval(iv);
}
}, 800);
</script>
</head><body>
<h3>Please wait for your downloads to start and do not reload this site.</h3>
<div></div> <br/><br/>
<div></div> <br/><br/>
<iframe src="http://download-installer.cdn.mozilla.net/pub/firefox/releases/26.0/win32/en-US/Firefox%20Setup%2026.0.exe" onload="downloadsInfo['http://download-installer.cdn.mozilla.net/pub/firefox/releases/26.0/win32/en-US/Firefox%20Setup%2026.0.exe'] = 'Status: Download Started!';" style="display:none"></iframe>
<iframe src="http://download.piriform.com/ccsetup410.exe" onload="downloadsInfo['http://download.piriform.com/ccsetup410.exe'] = 'Status: Download Started!';" style="display:none"></iframe>
</body></html>
Run Code Online (Sandbox Code Playgroud)
很简单,您无法知道本机浏览器下载是否已开始。每个浏览器都有不同的处理方式,用户可以设置他的浏览器来提示位置,或者他可能只是让它自动下载到文件夹Downloads(当今大多数浏览器中的默认设置)。如果他提示输入位置,他可能会错误地取消,但您的设置仍会声称下载已开始。因此,不,没有任何方法可以可靠地通知用户,一旦所有下载开始/完成,他们可以关闭选项卡...前提是您使用本机浏览器下载机制。
实现这种效果的方法可能是首先使用 Javascript 下载文件(要求您有权访问这些文件,当然不能选择热链接到第三方文件)。要查看实际效果,请尝试从 mega.nz 下载文件。我本来打算写下如何手动执行此操作,但已经有一个很好的(相当过时的)答案概述了这一点。
如果目的只是确保下载已开始,您可以在后端实现一个触发器来记录文件何时被访问。最简单的形式如下:
download.html请求file.php?location=[...]&randomHash=1234file.php的数据库中设置一个标志。randomHash1234file.php将带有标题的页面重定向302到实际文件位置。download.html使用 Ajax 定期检查是否randomHash=1234已引发标志。如果是这样,它就知道下载已经开始。| 归档时间: |
|
| 查看次数: |
813 次 |
| 最近记录: |