javascript – Chrome 65更改为在Chrome应用中自动下载blob
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Chrome 65更改为在Chrome应用中自动下载blob,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2602字,纯文字阅读大概需要4分钟。
内容图文
![javascript – Chrome 65更改为在Chrome应用中自动下载blob](/upload/InfoBanner/zyjiaocheng/774/d7161faefb94447a9a2a9daa2fcca4b2.jpg)
我有一个用JavaScript编写的谷歌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 … ).
有没有人知道一种不同的方法来自动下载不会在Chrome应用中遇到这些问题的blob文件?它不需要是跨浏览器,因为它是Chrome应用程序.
提前致谢!
解决方法:
遇到同样的问题,这是我如何解决它和我的笔记.
Chrome 65进行了更改,其中忽略了锚点下载属性.这会导致锚点击进行重定向而不是下载.仅当点击的URL是跨源时才会发生这种情况.显然,url开头的blob:protocol使它成为交叉起源或其他东西.
因此,要解决此问题,请使用Chrome应用和扩展程序可用的仅限chrome平台的API.结果他们添加了一个新的API,并且前段时间没有提到它称为chrome.downloads.
所以假设你有一个blob对象开始.首先,在其清单中为应用添加“下载”权限.这将启用“chrome.downloads”api.
然后执行以下操作:
const url = URL.createObjectURL(blob);
const args = {url: url};
const callback = function() {};
chrome.downloads.download(args, callback);
URL.revokeObjectURL(url);
我可以确认我刚刚在Mac上的Chrome 66中执行此操作,现在它会根据需要显示另存为对话框.
我对这个解决方案非常不满意,因为它不是跨平台的,但至少它是有效的.
API文档:https://developer.chrome.com/extensions/downloads
内容总结
以上是互联网集市为您收集整理的javascript – Chrome 65更改为在Chrome应用中自动下载blob全部内容,希望文章能够帮你解决javascript – Chrome 65更改为在Chrome应用中自动下载blob所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。