我正在谷歌扩展中创建页面操作弹出窗口。当弹出窗口关闭时,我需要将内容写回文件。为此,我附上了该window.unload
活动。在卸载处理程序中,我试图写入文件。但是由于我使用的是异步api,因此在为getFile
函数设置successHandler之后,页面立即关闭并且successHandler没有被执行。我可以在这里使用同步文件api吗?我读到同步 api 只能与 webworkers 一起使用。可以在扩展中使用吗?或者有没有其他方法可以处理这种情况。我将我的代码粘贴到此处的文件中
fileSystem.root.getFile(fileName, {create : true, exclusive : true}, function (fileEntry) {
file.createWriter(function() {
window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder;
var bb = new BlobBuilder();
bb.append(JSON.stringify(credentialsObj));
fileWriter.write(bb.getBlob('text/plain'));
}, errorHandler);
}, errorHandler);
修改最初发布的问题
我将上面的代码移到了内容脚本中。现在,当页面操作关闭时,我正在尝试与内容脚本进行通信。为此,我将一个函数附加到window.onunload
. 我在调试器模式下打开了页面操作弹出窗口并执行了location.reload(true)
. 然后我的window.unload
监听器被调用,我的程序控制到达内容脚本并且代码正在运行。但是当我实际部署扩展时,当用户单击弹出窗口以外的某个位置时,弹出窗口将关闭。在这种情况下不会调用卸载处理程序。Google 没有提供任何事件来检测弹出窗口何时关闭。提供的唯一事件是单击事件,如果页面操作有弹出窗口,则不会触发该事件。我可以做些什么来检测弹出窗口何时关闭?