【发布时间】:2018-09-01 08:56:25
【问题描述】:
我有一个用 JavaScript 编写的 Google Chrome 应用程序(Windows 和 Mac),带有一个用于自动下载日志文件的菜单项。在 Chrome 65 之前,我一直成功使用 https://github.com/eligrey/FileSaver.js,没有任何问题。现在,当用户单击菜单项时,我收到以下控制台错误:
Can't open same-window link to "blob:chrome-extension://lcgcc...1904"; try target="_blank"
所以我尝试添加 target="_blank",现在当我点击菜单项时,我得到一个 对话框:
There is no application set to open the URL blob:chrome-extension://lcgc...6b11.
Search the App Store for an application that can open this document,
or choose an existing application on your computer.
单击对话框上的“取消”会使其消失,但当然不会下载文件。
这是另一个问题(不是我的)的简单 jsfiddle,它具有类似的代码: http://jsfiddle.net/koldev/cW7W5/
var saveData = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
var json = JSON.stringify(data),
blob = new Blob([json], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
var data = { x: 42, s: "hello, world", d: new Date() },
fileName = "my-download.json";
saveData(data, fileName);
我在我的应用程序中尝试了这个示例代码,它显示了相同的行为:没有 target="_blank" 的错误消息和带有 target="_blank" 的对话框。
请注意,此代码在 Chrome 浏览器中可以正常工作 - 它会自动下载 blob 文件。这只是 Google Chrome 应用程序中的一个问题,而且只是在我升级到 Chrome 65 之后。
我知道谷歌浏览器应用程序“很快”就会消失,但与此同时,在我找到重写整个应用程序的人之前,我真的需要一个适用于所有用户的解决方案(简称告诉他们不要升级 Chrome……)。
有人知道自动下载不会在 Chrome 应用程序上遇到这些问题的 blob 文件的不同方法吗?它不需要跨浏览器,因为它是一个 Chrome 应用程序。
提前致谢!
【问题讨论】:
标签: javascript google-chrome download blob