在Javascript中,在不打开新标签页或窗口的情况下在同一标签页中启动下载。

39

我正在使用这个JavaScript函数来启动下载

function startDownload(url) {
   window.open(url, 'Download');
}

代码已经可以运行,但我希望阻止任何新标签页或新窗口的打开,谢谢。

4个回答

64
function startDownload(url) {

    window.location.href = url;
}

这将在相同的页面中开始下载,就像您单击没有任何目标的链接一样。

如果要强制下载文件,请确保使用正确的头部信息:

Content-Disposition: attachment; filename="mypdf.pdf";

这将确保文件被下载而非在浏览器中显示。请替换文件名部分为你想要默认出现在“另存为”对话框中的文件名。


9
如果我翻译得不好请见谅,以下是翻译内容:抱歉,如果这个问题很傻,请问 Content-Disposition: attachment; filename="mypdf.pdf"; 应该放在哪里? - Marcel
1
@Marcel,可能已经太晚了,但是必须在目标URL上设置头文件,而不能通过JavaScript设置。请参阅:https://dev59.com/PG855IYBdhLWcg3weEKJ#4326141。 - Luke Keller
@Marcel,你可以将它放在服务器响应中。这是Java代码:Response.ok(fileContent, "application/octet-stream").header("Content-disposition", "attachment; filename=mypdf.pdf").build(); - vanduc1102
1
@vanduc1102,感谢你提供的代码。我已经研究明白了很长时间。 - Marcel
非常有帮助!谢谢! - techcase

13

window.open会打开一个新的窗口或标签(取决于用户偏好)...如果只需下载文件,请使用

window.location.href = url;

如果 url 返回的是可下载的文件而不是网页,您可以使用这个方法。


我仍然在使用Internet Explorer时遇到问题,如果我有一个.pdf文件,它会打开该文件并在浏览器上显示未加密的文件。对于Chrome和Firefox,它们运行得非常好。 - Vervatovskis
你从哪里提供PDF文件?发送PDF时使用的MIME类型是什么?IE显示了什么? - Manse
1
这是我在IE中启动下载时得到的结果 ›É"¨36k.yš6¢Š(« ä÷§äš Ôø;}êÌ$‘ÍK„¯4QEóH1Ò‡$Å"ä¶*5ÞÒyŸéQEúŒœR‚¯Zšá8â¤q‘EQQàŽ¦ž¤æšsšQ‘TÆàj˜Þz(¢ŠÕÒîÌR)ÏC]Å•È•†é^qQ±]..... - Vervatovskis
顺便说一下,我正在使用 HttpHandler - Vervatovskis

8

在使用此解决方案之前,一定要查看 https://caniuse.com/#feat=download。 - ryankdwyer
在 Edge 版本 12、IE、Safari 10(及更早版本)或 Opera 版本 12(及更早版本)中不支持下载属性。 - Ryan Efendy
另外,由于它是一个启动下载的JavaScript函数,我认为创建一个链接、隐藏它,然后发送一个点击事件是为了只有一行JavaScript而做很多工作... - Salketer

5
<a target="_parent" href="link"></a>
  • _blank - 在新窗口中加载URL。这是默认设置。
  • _parent - URL在父框架中加载
  • _self - URL替换当前页面
  • _top - URL替换任何可能加载的框架集名称-窗口的名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接