在Chrome扩展程序内容脚本中共享内存中的对象?

时间:2014-08-22 18:16:04

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

我是JavaScript和Chrome开发的新手,我正在尝试创建一个在某些网页中注入内容/ CSS的扩展程序。很简单,但问题是这样做需要查看本地存储中的大量数据。从我到目前为止所读到的,正确的方法是:

  1. 每次访问页面时,直接从内容脚本中读取存储所需的数据( JSON序列化),或
  2. 维护扩展后台页面中的状态,并使用消息传递将所需数据( JSON序列化)传输到内容脚本环境。
  3. 然而,由于大量数据在每次页面加载时被不必要地序列化和反序列化,因此这些方法中的任何一种都会非常低效。

    所以,我想知道:

    • 在Chrome中维护共享内存缓存是否可以访问所有选项卡中注入的内容脚本?

    • 如果没有,那么背景页面是否可以监听chrome.tabs.onUpdated事件并以某种方式修改目标DOM本身是一种替代方法吗?

2 个答案:

答案 0 :(得分:0)

1)我不认为这是可能的。你好像已经筋疲力尽了。

2)内容脚本是访问/修改普通标签的DOM的唯一方法。

答案 1 :(得分:0)

  

1-每次访问页面时,直接从内容脚本中读取存储所需的数据(JSON序列化)。

但是每次加载你想要避免的页面时我都必须这样做(我猜)

  

2-维护扩展后台页面中的状态,并使用消息传递将所需数据(也是JSON序列化)传输到内容脚本环境。

使内容脚本和后台脚本交互的唯一方法是通过Message Passing。您实际上并没有寻求替代解决方案,但是您希望改进流程并避免每次加载页面时传递消息。

为此,您可以制定规范。规范说明了哪些URL或哪些域或基于某些条件要从Background获取数据。如果您当前的网址/标签仅与规格一致,则将消息传递给后台。

或者,后台也可以执行相同的操作,并仅在遵循您的规范时发送消息。此外,加载扩展时,您还可以将存储缓存到本地变量中。

使用Chrome Storage API侦听存储更改并相应地更新本地数据副本。

您也可以使用相同的方法查看this code written by me