Chrome error on downloading file via iframe
我正在向服务器提交JSON数据。 服务器生成PDF文件并使用该PDF文件的URL进行响应。 然后我再向服务器发出下载PDF文件的请求。 要进行下载,我创建一个隐藏的iframe并将源设置为PDF网址。 请注意,我希望用户的浏览器保持在同一页面并在后台下载。 关于我正在做什么以及我采用的解决方案的更多细节可以在这个SO问题中找到。
每当我在Chrome中使用这种技术时,一切正常。 但是看一下chrome开发人员控制台,我看到了错误消息
在jsfiddle上可以看到一个非常简单且有效的问题。 只需单击"下载PDF"按钮,然后查看Chrome控制台即可。
该页面上的代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $(document).ready( function() { var downloadFile = function(url){ var iframe = $("iframe#download"); if (!iframe.length) { iframe = $("<iframe id='download' style='display:none;'/>"); $("body").append(iframe); } iframe.attr("src", url); }; $("button").click(function() { downloadFile("http://www.education.gov.yk.ca/pdf/pdf-test.pdf"); }); }); |
其他受访者建议更改内容类型标题,这应该也可以正常工作,但是有一个特定的响应标题用于指示浏览器如何处理文件。
以下应强制下载pdf而不是在浏览器中显示:
"内容处理:附件;文件名= [您的文件名]"
Chrome有一个内置的PDF查看器。当您设置iframe的src时,Chrome只会尝试显示PDF文件。由于它设置为
尝试将
这只是我的头脑 - 我相信我之前遇到过同样的问题。当iframe首次添加到dom时,它没有src - 这使Chrome"无法加载资源"。
尝试将初始src添加到iframe -
1 | iframe = $("<iframe id='download' src='about:blank' style='display:none;'/>"); |
应该这样做我相信。 (如果错了,你可以给我数百万次:)
1 2 3 4 5 6 7 8 9 10 11 | var downloadFile = function(url){ var iframe = $("iframe#download"); if (!iframe.length) { iframe = $("<iframe id='download' style='display:none;'/>"); $("body").append(iframe); } iframe.attr("src", url); iframe.on('load',function(){ console.log("error") }); }; |
你试试这个,它有效,但这不是解决这个问题的正确方法......
我将文件的src更改为我自己的Web服务器上的src,并将响应头的"content-type"设置为"application / octet-stream"而不是"application / pdf",并在Chrome中正确下载。我应该指出错误仍然出现在控制台中("加载资源错误"),但它仍然促使我下载文件。
将你的功能移到document.ready之外......
一般功能应始终在...之外,并且应该在需要时调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $(document).ready( function() { $("button").click(function() { downloadFile("http://www.education.gov.yk.ca/pdf/pdf-test.pdf"); }); }); var downloadFile = function(url){ var iframe = $("iframe#download"); if (!iframe.length) { iframe = $("<iframe id='download' style='display:none;'/>"); $("body").append(iframe); } iframe.attr("src", url); }; |