Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过js或query强制下载_Javascript_Jquery - Fatal编程技术网

Javascript 通过js或query强制下载

Javascript 通过js或query强制下载,javascript,jquery,Javascript,Jquery,是否可以通过JS或Javascript强制下载,即网页不应在浏览器的“新建”选项卡中打开文件,而是弹出,让用户选择“另存为”或使用打开???不,这是不可能的,感谢上帝,这不是。否则,我会让你想象,当你访问一个网站时,在你不知情的情况下,什么样的文件可以存储在你的计算机上 正如@Paul D.White在评论部分所指出的,如果您想使用与之关联的默认程序内联(在浏览器内部)打开文件,您可以让服务器发送内容处置HTTP头。例如: Content-Disposition: inline; filenam

是否可以通过JS或Javascript强制下载,即网页不应在浏览器的“新建”选项卡中打开文件,而是弹出,让用户选择“另存为”或使用打开???不,这是不可能的,感谢上帝,这不是。否则,我会让你想象,当你访问一个网站时,在你不知情的情况下,什么样的文件可以存储在你的计算机上

正如@Paul D.White在评论部分所指出的,如果您想使用与之关联的默认程序内联(在浏览器内部)打开文件,您可以让服务器发送内容处置HTTP头。例如:

Content-Disposition: inline; filename=foo.pdf

不,这仅在JQuery/JavaScript中是不可能的


您将需要一个服务器端脚本,该脚本返回带有
内容类型(HTTP头)的文件,该文件将强制浏览器下载您请求的文件。
内容类型
的一个可能值是
应用程序/force download

您不能从JavaScript强制执行该行为,需要在服务器端设置HTTP头:

Content-disposition=attachment; filename=some.file.name
解决此问题的方法是让AJAX方法将用户重定向到PDF的URL:

location.replace('path/to.pdf');
(必须为PDF设置上述HTTP标头)


更新


在回答这个问题时,这是不可能的。现在,请向下滚动查看。

随着HTML5的出现,您可以在锚定标签中使用新的属性下载

代码将类似于

<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a>

它适用于firefox和chrome的最新版本。我应该说我没有登记吗P

在sstur的注释后编辑了下载属性



动态创建链接,并使用下载属性单击该链接以强制下载为文件:

var anchor = document.createElement('a');
anchor.href = this.props.download_url;
anchor.target = '_blank';
anchor.download = this.props.file_name;
anchor.click();
请注意,我甚至没有将它添加到DOM中,所以速度很快

p.S
download
属性不适用于IE。但它只会在新选项卡中打开链接。

这个的副本?的确如此。这是一个有用的重复示例,因为问题标题的措词非常不同,即使它谈论的是同一件事。更正:您只能在服务器端执行此操作,因为它是通过设置HTTP响应头(特别是
内容处置:附件
)完成的。一旦页面在客户端中打开,HTTP响应根据定义已经被处理。询问者明确表示,他希望将其与对话框一起使用,而不是打开新选项卡,因此这与您正在回复的内容不符?@gnur,正确。我将更新我的答案,包括@Paul D.White优秀的提案。目前我在页面上有一个按钮可下载pdf。。。。。它所做的是调用一个ajax函数,该函数使用一个后端PHP文件将PDF存储在磁盘上。然后我只想用ajax成功方法强制下载该PDF…@user418232,恐怕这是不可能的。您无法使用javascript向客户端计算机写入。值得注意的是,您可以为“下载”属性指定一个值,该值将成为下载的默认文件名。这确实是一种更先进的解决方案,但截至2013年11月,IE或大多数移动设备均不支持该解决方案。(来源:)它不适用于Opera或IE,但是我自己仍然喜欢这个解决方案。作为一个例子,当内容位于不同的主机名上时,您指定的下载值将被忽略,并且源代码受标题限制,例如
X-Frame-Options:SAMEORIGIN
,浏览器会阻止您在不同的站点或不同的端口下下载文件,所以这是一个相当有限的功能……现在可以使用该属性进行下载。@mpen是的,答案是这样的。在提出问题时,它还不可用。不是说你需要更改答案,但它出现在顶部,并且被接受,所以我只是让人们知道,他们太懒了,无法进一步滚动:-)@mpen,因为Chrome 65,跨源HREF不再可能。因此,如果您想创建
No,那么无论是头部还是任何其他方法都不会强制下载。这个答案不正确。而且click()也不适用于许多浏览器,或者只适用于按钮:什么浏览器?旧的默认android?我从来没有一张关于这个不起作用的罚单,这个答案已经有好几年了。做一个测试,显示什么不起作用。我不能用Edge和IE进行测试,但Firefox的最后一个版本与click()不兼容,只能用于按钮。检查我刚才在底部为Gecko设置的MDN链接,在safari 6和chrome 20(当然,是旧浏览器)下也是一样的,但即使这样的标题也不会强制下载,这取决于用户在浏览器上本地设置选项的方式。