【问题标题】:Write to HTML5 FileSystem API storage on page unload在页面卸载时写入 HTML5 FileSystem API 存储
【发布时间】:2012-09-03 22:45:42
【问题描述】:

所以我使用 HTML5 FileSystem API 将大量数据写入文件——我想在 HTML 页面卸载时写入这些数据,即当用户导航离开时。

http://www.html5rocks.com/en/tutorials/file/filesystem/

它不工作,我担心可能没有办法让它工作。即使你已经有一个文件系统的引用,至少有两个回调你必须等待:一个在你调用 getFile 之后,它会给你一个 fileEntry,下一个在你调用 createWriter 之后,它会给你一个 fileWriter——不是提及成功/失败回调。我认为回调没有被调用,因为用户正在导航。

有没有办法解决这个问题?我尝试使用 onbeforeunload 和确认消息来导航,只是想看看对话框引入的延迟是否会给它时间写,但这不起作用(可能是由于 Javascript 是单线程的?)现在我想知道如果我可以在他们在页面上的整个过程中保留一个打开的 fileWriter,以期待他们何时离开?任何帮助表示赞赏。

【问题讨论】:

  • 您的文件系统 javascript 代码在其他事件(如 onload..

标签: javascript html google-chrome


【解决方案1】:

在某些浏览器中,onunload/onbeforeunload 中您可以执行的操作(或您可以执行的工作量)是有限制的。例如,onunload 在 Chrome 中完成有 1 秒的超时时间。您在onunload 中排队的任何异步任务都不能保证一旦退出就会运行。

(当一个页面被卸载时,浏览器会释放脚本执行上下文,因此一些在页面消失之前没有发布的链式回调将不会运行。)

我建议尝试像您正在做的那样尝试缓存 fileEntry/fileWriter,但没有任何保证,尤其是在您写入大量数据的情况下。

【讨论】:

    【解决方案2】:

    我得到了这个工作

    1. 打开文件并在页面加载时获取写入器(所以,我全部完成:请求配额、获取文件系统、文件条目和文件写入器,然后在用户打开时保持文件写入器页面

    2. 在“onbeforeunload”事件中写入文件

    3. 从“onbeforeunload”返回一个字符串,以便在您离开页面时显示确认消息。这很烦人,但确认消息对于给它时间来完成文件写入是必要的。如果你不这样做,写入永远不会发生。

    仍然开放以获得更好的解决方案,如果没有确认消息会很高兴。

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多