0

假设我正在编写一个扩展,它有两个匹配不同 URL 模式的页面模块,它们有时会重叠。如果两个页面模块共享一些 JS 库,我的扩展是否有办法只将这些共享的 JS 库加载到特定页面一次并让两个页面模块都使用它们?

在我看来,扩展加载到页面中的每个页面模块都有自己的全局范围/命名空间,这阻碍了代码共享。但是,文档似乎表明同一页面中的内容脚本应该能够直接相互访问:

加载到同一文档中的内容脚本可以直接相互交互,也可以与 Web 内容本身交互。

4

1 回答 1

0

加载到同一个文档中的内容脚本可以直接相互交互,也可以与 Web 内容本身交互,只要它们是通过同一个 PageMod 实例加载的

这就是为什么 PageMod 的 contentScriptFile 选项采用一个可以列出多个文件的数组,以便您可以加载例如 jQuery,然后在您自己的单独代码中使用 jQuery。

不起作用的是为多个 PageMod 实例提供一些共享范围,因为每个 PageMod 都加载到单独的沙箱中。

如果您需要简单的通信,一个可能的 wqorkaround 方法是通过 SDK 的 EventEmitter 'port' 对象从单独的 PageMod 实例路由消息。

不幸的是,没有办法在沙箱之间共享脚本资源,因为没有共享的跨沙箱范围。

于 2013-01-07T22:26:18.243 回答