什么是最好的跨浏览器方式来打开下载对话框(假设我们可以设置内容处置:标题中的附件)而无需导航离开当前页面,或打开弹出窗口,这在IE6中无法正常工作.
这个javascript很好,它不会打开一个新窗口或选项卡.
window.location.assign(url);
7年过去了,好的.我不知道它是否适用于IE6,但这会在FF和Chrome中提示OpenFileDialog.
var file_path = 'host/path/file.ext'; var a = document.createElement('A'); a.href = file_path; a.download = file_path.substr(file_path.lastIndexOf('/') + 1); document.body.appendChild(a); a.click(); document.body.removeChild(a);
我总是在下载链接中添加一个target ="_ blank".这将打开一个新窗口,但只要用户单击"保存",新窗口就会关闭.
将其放在HTML头部分中,将url
var 设置为要下载的文件的URL:
然后把它放在体内,这将在5秒后自动开始下载:
(从这里开始.)
正如这个问题所暗示的那样,我一直在寻找一种使用javascript来启动文件下载的好方法.然而,这些答案没有帮助.然后我做了一些xbrowser测试,发现iframe在IE> 8的所有现代浏览器上效果最好.
downloadUrl = "http://example.com/download/file.zip"; var downloadFrame = document.createElement("iframe"); downloadFrame.setAttribute('src',downloadUrl); downloadFrame.setAttribute('class',"screenReaderText"); document.body.appendChild(downloadFrame);
class="screenReaderText"
是我的类来设置存在但不可见的内容.
CSS:
.screenReaderText { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
与html5boilerplate中的.visuallyHidden相同
我更喜欢这个javascript window.open方法,因为如果链接被破坏,iframe方法根本不做任何事情,而不是重定向到空白页面说文件无法打开.
window.open(downloadUrl, 'download_window', 'toolbar=0,location=no,directories=0,status=0,scrollbars=0,resizeable=0,); window.focus();
我知道问题已被问到,7 years and 9 months ago
但许多发布的解决方案似乎不起作用,例如仅使用作品
FireFox
但不能使用Chrome
.
最佳方案:
打开文件下载弹出窗口的最佳工作解决方案JavaScript
是使用HTML
链接元素,而无需将链接元素附加到document.body
其他答案中所述的链接元素.
您可以使用以下功能:
function downloadFile(filePath){ var link=document.createElement('a'); link.href = filePath; link.download = filePath.substr(filePath.lastIndexOf('/') + 1); link.click(); }
在我的应用程序中,我这样使用它:
downloadFile('report/xls/myCustomReport.xlsx');
工作演示:
function downloadFile(filePath) {
var link = document.createElement('a');
link.href = filePath;
link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
link.click();
}
downloadFile("http://www.adobe.com/content/dam/Adobe/en/accessibility/pdfs/accessing-pdf-sr.pdf");
如果链接是有效的文件URL,只需指定window.location.href即可.
但是,有时链接无效,并且需要iFrame.
执行正常的event.preventDefault以防止窗口打开,如果您使用的是jQuery,这将起作用:
$('
修改窗口的位置可能会引起一些问题,尤其是当您拥有像websocket这样的持久连接时。因此,我总是采用良好的旧iframe解决方案。
的HTML
... ... ...
Java脚本
function downloadButtonClicked() { // Simulate a link click var url = 'your_download_url_here'; var elem = document.createElement('a'); elem.href = url; elem.target = 'hiddenIframe'; elem.click(); }