【问题标题】:FileSaver.js -.saveAs: How to add listenersFileSaver.js -.saveAs:如何添加监听器
【发布时间】: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@、progresswrite, and writeend` 会在下载开始后立即发送
  • @JaromandaX 我可能使用的是旧版本。我上面包含的 GitHub 项目中的版本是最新的吗?如果没有,我在哪里可以找到新版本?

标签: javascript filesaver.js browser-nativefs


【解决方案1】:

FileSaver.js 受限于使用save link 隧道:声明监听器不起作用,无法获取保存文件的名称和目录,甚至无法知道文件是否保存在全部。

使用 browser-nativefs 而不是 FileSaver.js 的好处是它使用了已建立的 FileHandler / File API。但是 browser-nativefs 对我的目的来说太有限了:你无法获取文件下载的目录/URI/URL。提供此“链接”的唯一方法是通过 (FileSave.js) 浏览器文件下载过程,超出 JavaScript 可以看到的范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 2018-08-30
    相关资源
    最近更新 更多