我是JavaScript和Chrome开发的新手,我正在尝试创建一个在某些网页中注入内容/ CSS的扩展程序。很简单,但问题是这样做需要查看本地存储中的大量数据。从我到目前为止所读到的,正确的方法是:
然而,由于大量数据在每次页面加载时被不必要地序列化和反序列化,因此这些方法中的任何一种都会非常低效。
所以,我想知道:
在Chrome中维护共享内存缓存是否可以访问所有选项卡中注入的内容脚本?
如果没有,那么背景页面是否可以监听chrome.tabs.onUpdated
事件并以某种方式修改目标DOM本身是一种替代方法吗?
答案 0 :(得分:0)
1)我不认为这是可能的。你好像已经筋疲力尽了。
2)内容脚本是访问/修改普通标签的DOM的唯一方法。
答案 1 :(得分:0)
1-每次访问页面时,直接从内容脚本中读取存储所需的数据(JSON序列化)。
但是每次加载你想要避免的页面时我都必须这样做(我猜)
2-维护扩展后台页面中的状态,并使用消息传递将所需数据(也是JSON序列化)传输到内容脚本环境。
使内容脚本和后台脚本交互的唯一方法是通过Message Passing
。您实际上并没有寻求替代解决方案,但是您希望改进流程并避免每次加载页面时传递消息。
为此,您可以制定规范。规范说明了哪些URL或哪些域或基于某些条件要从Background获取数据。如果您当前的网址/标签仅与规格一致,则将消息传递给后台。
或者,后台也可以执行相同的操作,并仅在遵循您的规范时发送消息。此外,加载扩展时,您还可以将存储缓存到本地变量中。
使用Chrome Storage API侦听存储更改并相应地更新本地数据副本。
您也可以使用相同的方法查看this code written by me。