我正在构建一个Google Chrome扩展程序,它将为一个网站上的所有网页加载内容脚本(即清单指定http://website.com/ *)。扩展还从本地存储加载了大量数据(这非常慢!)。因此,为了减少加载时间,我只想从存储器加载一次并将数据保存在整个会话的内存中。
执行此操作的错误方法是使用后台页面(或具有persistent:true的事件页面)。这可以工作,因为后台页面只能从存储中加载一次数据并将其保存在内存中。然后,每次重新加载内容脚本时(例如,当用户导航到新页面时),它可以从后台页面请求数据。该选项的问题在于它不必要地使用大块内存,即使用户可能不经常访问website.com。基本上,这是背景页面的问题,但在这种情况下它特别糟糕,因为来自本地存储的数据太大,因此使用的内存非常大。
我想做的是使用非持久性事件页面。如上所述,当用户导航到website.com时,事件页面将从本地存储加载数据,内容脚本将从事件页面检索数据。我需要做的就是阻止事件页面卸载,直到用户导航离开域。事件页面可以侦听活动选项卡的导航,并在域名从website.com更改时允许自己卸载。
来自Chrome developer documentation:
在关闭所有可见视图(例如,弹出窗口)并关闭所有消息端口之前,不会卸载事件页面。
导航页面时消息端口关闭,因此这不是一个选项。我可以以某种方式创建一个在活动标签导航期间保持可见的视图吗?还是有其他解决方案吗?