我知道one can use ports检测弹出窗口关闭。但是,当我希望保留弹出窗口的信息时,这不起作用。
对于this extension,我需要能够在弹出窗口关闭时将textarea内容保存到同步存储。已有一个更新按钮来管理这个,但如果弹出窗口(意外)关闭,则无法暂时停止并保存状态。
这样做的一种方法是继续将内容存储在按键上,但我不想经常点击存储(特别是因为它连接到其他一些事件处理程序)。
有没有什么方法可以模仿onbeforeunload
弹出窗口,而不会对I / O造成过重影响?
答案 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