2

我有一个将一些文件保存到下载文件夹的扩展程序。下面的代码仅用于测试

//This lies in the background page of my extension
function fileTest(name) {
    var a = document.createElement('a');
    a.href = 'data:text/plain;base64,SGVsbG8gV29ybGQh'; //Hello World!
    a.download = name + '.txt';
    a.onclick = function (e) {console.log('[TEST] ' + name);return true;};
    a.click();
}
window.onload = function() {
    fileTest('test1');
    fileTest('test12');
    fileTest('test123');
}

只有第一个文件“test1.txt”保存到磁盘,虽然控制台的输出显示有 3 次点击

[测试] 测试1

[测试] test12

[测试] test123

这是浏览器的故意限制吗?还是代码有问题?

4

1 回答 1

3

当我在常规浏览会话中运行您的代码时,我会收到一条滑出通知(在窗口顶部),上面写着

该站点正在尝试下载多个文件。你想允许这个吗?

所以,是的,限制非用户启动的下载是浏览器的安全限制。您可能看不到通知,因为该操作正在由您的后台页面执行。

如您的代码的此变体所示,限制似乎是每个用户操作一次下载:

window.onclick = function() {
    fileTest('test1');
}

这将允许无限下载,但每次点击事件只能下载一次。

于 2013-01-23T00:51:37.090 回答