Javascript 在Chrome上下载外部PDF文件时,HTML5下载属性不起作用

Javascript 在Chrome上下载外部PDF文件时,HTML5下载属性不起作用,javascript,html,Javascript,Html,代码非常简单: <a download href="http://www.pdf995.com/samples/pdf.pdf">Download</a> 我希望它能保存pdf文件,但它总是在浏览器上打开文件 它适用于其他文件类型,只是PDF文件有问题。请参阅: 此属性仅适用于相同的源URL 据推测,其他文件类型,即您认为“工作”的文件类型,默认行为是下载文件。请参阅: 此属性仅适用于相同的源URL 据推测,其他文件类型(您看到它“工作”时)的默认行为是下载文件。如

代码非常简单:

<a download href="http://www.pdf995.com/samples/pdf.pdf">Download</a>

我希望它能保存pdf文件,但它总是在浏览器上打开文件

它适用于其他文件类型,只是PDF文件有问题。

请参阅:

此属性仅适用于相同的源URL

据推测,其他文件类型,即您认为“工作”的文件类型,默认行为是下载文件。

请参阅:

此属性仅适用于相同的源URL


据推测,其他文件类型(您看到它“工作”时)的默认行为是下载文件。

如果您试图获取的URL具有
访问控制允许源文件
标题,您可以使用
获取
和blob来解决此问题:

函数强制下载(blob,文件名){
//创建一个不可见的锚元素
const-anchor=document.createElement('a');
anchor.style.display='none';
anchor.href=window.URL.createObjectURL(blob);
setAttribute('download',filename);
document.body.appendChild(锚定);
//通过模拟单击触发下载
anchor.click();
//清理
window.URL.revokeObjectURL(anchor.href);
document.body.removeChild(锚定);
}
函数下载资源(url、文件名){
//如果未设置文件名,请使用URL中的文件名
如果(!filename)filename=url.match(/\/([^/#?]+)[^/]*$/)[1];
获取(url{
标题:新标题({
原点:window.location.Origin,
}),
模式:“cors”,
})
.then(response=>response.blob())
.then(blob=>forceDownload(blob,文件名))
.catch(e=>console.error(e));
}
下载资源('https://memegen.link/xy/fetch/all_the_things.jpg?watermark=none');
这有一些限制:

  • Blob的文件大小限制约为500MB
  • 一些网站将不允许跨来源请求,导致如下错误
加载失败:请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

参考文献1:in

参考文献2:


完整说明:

如果您试图获取的URL具有
访问控制允许来源
标题,您可以使用
获取
和blob解决此问题:

函数强制下载(blob,文件名){
//创建一个不可见的锚元素
const-anchor=document.createElement('a');
anchor.style.display='none';
anchor.href=window.URL.createObjectURL(blob);
setAttribute('download',filename);
document.body.appendChild(锚定);
//通过模拟单击触发下载
anchor.click();
//清理
window.URL.revokeObjectURL(anchor.href);
document.body.removeChild(锚定);
}
函数下载资源(url、文件名){
//如果未设置文件名,请使用URL中的文件名
如果(!filename)filename=url.match(/\/([^/#?]+)[^/]*$/)[1];
获取(url{
标题:新标题({
原点:window.location.Origin,
}),
模式:“cors”,
})
.then(response=>response.blob())
.then(blob=>forceDownload(blob,文件名))
.catch(e=>console.error(e));
}
下载资源('https://memegen.link/xy/fetch/all_the_things.jpg?watermark=none');
这有一些限制:

  • Blob的文件大小限制约为500MB
  • 一些网站将不允许跨来源请求,导致如下错误
加载失败:请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源“”

参考文献1:in

参考文献2:


完整说明:

我相信这是在浏览器端可以配置的。您可以选择天气下载或可视化PDFCA,是否可以添加更多上下文?什么浏览器/平台?你是通过JS停止的吗?这能回答你的问题吗?我相信这在浏览器端是可配置的。您可以选择天气下载或可视化PDFCA,是否可以添加更多上下文?什么浏览器/平台?你是通过JS停止的吗?这能回答你的问题吗?我不确定,但也许你是对的。无论如何,我通过获取blob数据并在本地构建文件url下载来解决这个问题。我不确定,但也许你是对的。无论如何,我通过获取blob数据并在本地构建要下载的文件url来解决这个问题。