无需离开页面即可打开下载窗口的最简单方法

IT技术 javascript
2021-01-24 05:19:09

打开下载对话框的最佳跨浏览器方式是什么(假设我们可以在标题中设置 content-disposion:attachment )而不离开当前页面或打开弹出窗口,这在 Internet Explorer(IE)中不起作用) 6.

6个回答

这个javascript很好,它不会打开一个新窗口或标签。

window.location.assign(url);
我使用了相同的解决方案,但它在同一个选项卡中打开文件,而不是打开下载对话框。
2021-03-19 05:19:09
如果 url 用于下载页面,则与 window.open(url, '_self') 相同。
2021-04-02 05:19:09
这会导致 WebSocket 连接断开。
2021-04-07 05:19:09
我在使用IE11时发现这会导致JS停止。因此,对于 IE 11,我使用了 window.open(url, '_blank') 它确实打开了另一个选项卡,但是该选项卡在确定文件是下载时关闭。这使 JS 保持运行。
2021-04-07 05:19:09
这与 window.location = url; 相同;“每当为 location 对象分配新值时,将使用 URL 加载文档,就像使用修改后的 URL 调用 window.location.assign() 一样”- developer.mozilla.org/en-US/docs/网页/API/window.location
2021-04-09 05:19:09

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);
@user1933131 chrome 仅针对跨域删除
2021-03-16 05:19:09
为了使其在 Edge 16 上工作,文件来自的标题应该包含Content-Type: application/octet-streamContent-Disposition: attachment
2021-03-19 05:19:09
2021-03-23 05:19:09
@Manoj Rana - 我已经检查过 FF 58.0.2(64 位)它正在运行。如果删除 2 行document.body.appendChild(a); 它将不适用于任何 FF document.body.removeChild(a);
2021-04-02 05:19:09
@PauliusDragunas 它仍然有效。但它不适用于跨域 url。
2021-04-04 05:19:09

我知道有人问了这个问题,7 years and 9 months ago但许多已发布的解决方案似乎不起作用,例如使用<iframe>仅适用于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');

工作演示:

笔记:

  • 您必须使用该link.download属性,以便浏览器不会在新选项卡中打开文件并触发下载弹出窗口。
  • 这已使用多种文件类型(docx、xlsx、png、pdf 等)进行了测试。
这看起来是我案例的最佳方法
2021-03-16 05:19:09
谢谢@cнŝdk!我删除了我之前的评论,因为我发现 PWA 在前往document.createElement(). 如果我清理它们,该方法仍然有效。
2021-03-27 05:19:09
这个解决方案对我来说适用于 Chrome、Safari 和 Firefox :)
2021-04-03 05:19:09
它在 Firefox 中不起作用。怎么在火狐下载?
2021-04-05 05:19:09
@Ctrl_Alt_Defeat 好吧,在这种情况下跟踪下载过程并不容易,但是一个技巧可以是在link单击时显示此 gif 动画并在超时后隐藏它,使用以下代码:link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); },您可以看到它工作fiddle,但请记住,这不是推荐的方法,如果我们使用Ajax.
2021-04-09 05:19:09

我总是在下载链接中添加一个 target="_blank"。这将打开一个新窗口,但只要用户单击保存,新窗口就会关闭。

这是最好的答案。在 Internet Explorer 中,将 'target="_blank"' 添加到要下载的链接将阻止浏览器导航离开(打印“HTML1300:导航发生”的位置),从而使页面处于不一致状态。
2021-03-18 05:19:09

把它放在 HTML 头部分,将urlvar设置为要下载的文件的 URL:

<script type="text/javascript">  
function startDownload()  
{  
     var url='http://server/folder/file.ext';    
     window.open(url, 'Download');  
}  
</script>

然后把这个放在 body 里,它会在 5 秒后自动开始下载:

<script type="text/javascript">  
setTimeout('startDownload()', 5000); //starts download after 5 seconds  
</script> 

(从这里开始。)

它在浏览器的新窗口中打开。可以自动下载吗???谢谢
2021-03-15 05:19:09
这不起作用,因为在 IE6 中,如果用户单击“保存”,文件将被保存,但弹出窗口保持打开状态。这是不可接受的。
2021-04-06 05:19:09
此代码在 safari 中不起作用,请您帮我在 safari 中解决。
2021-04-08 05:19:09