【发布时间】:2022-04-20 23:51:33
【问题描述】:
观察以下代码:
let cv = document.createElement('canvas');
cv.toBlob(blob => {
let a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'test.jpg';
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}, 'image/jpeg', 1);
如果我在浏览器的新选项卡上打开控制台并粘贴它,它将按预期下载一个名为 test.jpg 的文件。我也在各种随机网站(一些在 HTTPS 上,一些在 HTTP 上)上完成了此操作,并且它在任何地方都有效。 但是,如果我在自己的网站上尝试此操作,Chrome 会在标签中加载图片而不是下载它。
我知道 download 属性不适用于跨域 URL,但正如您所见,这是同一域上的 blob: URL。此行为适用于我的测试环境(在 localhost:8585 上运行)和我的实时网站。
现在,我过去读到浏览器有时将localhost 视为跨域,因为它没有以有效的 TLD 结尾,因此不是有效的域名(这可以解释测试中的错误环境)。我的现场网站反过来有一个.app TLD,它是最近才引入的——所以,我能想到的唯一解释是浏览器可能还没有将.app 域识别为有效,因此跨域行为。
谁能证实我的怀疑,或提供解决方案?
【问题讨论】:
-
在 Chrome V68.0.3440.75 上可以正常工作
-
@gaetanoM 在本地主机站点上?下载本身在 Chrome 中也适用于我,只是不是在所有来源上。
-
在本地主机站点 (localhost:63342/...../file.html) 上是。因此,我不知道在哪里寻找....根据您的问题,我将您的代码复制到控制台的新页面中。如果您有其他信息,请告诉我。谢谢
标签: javascript html cross-domain