在弹出窗口关闭之前,有没有办法检测Chrome扩展程序的弹出窗口关闭?

时间:2014-03-03 08:28:22

标签: javascript google-chrome google-chrome-extension

我知道one can use ports检测弹出窗口关闭。但是,当我希望保留弹出窗口的信息时,这不起作用。

对于this extension,我需要能够在弹出窗口关闭时将textarea内容保存到同步存储。已有一个更新按钮来管理这个,但如果弹出窗口(意外)关闭,则无法暂时停止并保存状态。

这样做的一种方法是继续将内容存储在按键上,但我不想经常点击存储(特别是因为它连接到其他一些事件处理程序)。

有没有什么方法可以模仿onbeforeunload弹出窗口,而不会对I / O造成过重影响?

2 个答案:

答案 0 :(得分:0)

所有扩展页面(后台页面,浏览器操作弹出窗口等)共享相同的进程并通过chrome.extension.getBackgroundPage / chrome.extension.getViews获得彼此的直接脚本访问权限,因此您可以尝试的一件事是弹出窗口中的onbeforeunload事件,它抓取后台页面的句柄并将任何javascript数据传递到后台页面,然后让它进行序列化。您甚至可以使用document.adoptNode移交一大块DOM。

一般情况下,虽然我们鼓励更多的“在用户空闲几秒钟后保存”,但是编写扩展和应用程序的方法,因为您的代码可能出于多种原因意外停止运行(整个浏览器或操作系统崩溃,丢失权力等)。显然,如果你有一个大数据结构需要保存,那就更难了,因为你必须开始考虑如何进行增量保存等。

答案 1 :(得分:-2)

使用localStorage保存数据,使用setPopup保存页面,请参阅此处Keep a chrome extension popup after close it