【发布时间】:2020-12-27 22:02:36
【问题描述】:
我的代码(除了 filesaver.js 依赖项 (https://github.com/eligrey/FileSaver.js/) 之外,我会使其可运行)
var array = new Array();
array[0] = 'a'; //.replace(/<br>/g, '\n\t');
var blob = new Blob(array, {type: "text/plain;charset=utf-8"});
var pub = function () {
console.log('hello');
console.log(new Error().stack);
}
let loc = window.location.pathname.substring(window.location.pathname.lastIndexOf("/") + 1);
let obj = window.saveAs(blob, loc);
obj.onwriteend = pub;
// obj.onerror = pub;
obj.onabort = pub;
文件保存没有问题
问题是 onwriteend 处理程序在我选择文件之前就被调用了,而 onabort 永远不会被调用。我不知道这里发生了什么。当内容写入磁盘或文件选择器被中止时,我正在尝试获取回调。
【问题讨论】:
-
看起来当这个 js 文件被加载时,
let loc = ...之后的所有内容都会立即被触发,所以你想将它们包装在一个EventListener中,正如你所提到的,根据你想要的触发器。我假设这是一个网站?但是如果没有更多的代码,就很难准确地说出您需要进行哪些更改。如果您希望在单击button后触发它,请将提到的代码包含在方法中,然后在触发器button上,添加以下属性onclick="methodName()" -
@Sal 它实际上是在一个(按钮“单击”)EventListener 中运行的。从 saveAs 返回的 Object obj 具有多个侦听器的字段,包括 onwriteend 和 onabort。就像我说的 onwriteend 事件 is 被触发,就在我选择一个文件之前,甚至在文件写入开始之前(通过 error.stack 消息和行上的断点确认) FileSaver.js)
-
在这种情况下,请提供所有相关代码,以便我们查看正在发生的事情,包括 HTML 和任何其他可能相关的 javascript
-
如果filesaver.js,你一定用的是旧版本,和我用的一样,你会发现如果filesaver.js可以使用“保存链接”的方法,那么@ 987654328@、
progress、write, andwriteend` 会在下载开始后立即发送 -
@JaromandaX 我可能使用的是旧版本。我上面包含的 GitHub 项目中的版本是最新的吗?如果没有,我在哪里可以找到新版本?
标签: javascript filesaver.js browser-nativefs