在页面卸载时写入HTML5 FileSystem API存储

时间:2012-09-11 03:28:30

标签: javascript html5 google-chrome

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

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

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

这有什么办法吗?我尝试使用带有/确认消息的onbeforeunload导航,只是为了看看对话框引入的延迟是否会给它时间写,但这不起作用(可能是由于Javascript是单线程的?)现在我想知道如果我可以在页面上保留一个打开的文件,那么期望它们何时离开?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

在某些浏览器中,onunload / onbeforeunload中您可以执行的操作(或您可以执行的工作量)受到限制。例如,在Chrome中完成onunload的暂停时间为1秒。您在onunload中排队的任何异步任务都不能保证在退出后立即运行。

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

我建议尝试缓存fileEntry / fileWriter,就像你正在做的那样,但没有任何保证,特别是如果你正在编写大量数据。

答案 1 :(得分:0)

我的工作是

  1. 打开文件并在页面加载时获取编写器(所以,我这样做:请求配额,获取文件系统,文件条件和文件编写器,然后在用户打开时保持文件编写器页面

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

  3. 从“onbeforeunload”返回一个字符串,这样当你离开页面时会有一条确认消息。这很烦人,但确认消息是必要的,以便有时间完成文件的编写。如果你不这样做,写不会发生。

  4. 仍然可以获得更好的解决方案,很高兴没有确认信息。