假设我正在编写一个扩展,它有两个匹配不同 URL 模式的页面模块,它们有时会重叠。如果两个页面模块共享一些 JS 库,我的扩展是否有办法只将这些共享的 JS 库加载到特定页面一次并让两个页面模块都使用它们?
在我看来,扩展加载到页面中的每个页面模块都有自己的全局范围/命名空间,这阻碍了代码共享。但是,文档似乎表明同一页面中的内容脚本应该能够直接相互访问:
加载到同一文档中的内容脚本可以直接相互交互,也可以与 Web 内容本身交互。
假设我正在编写一个扩展,它有两个匹配不同 URL 模式的页面模块,它们有时会重叠。如果两个页面模块共享一些 JS 库,我的扩展是否有办法只将这些共享的 JS 库加载到特定页面一次并让两个页面模块都使用它们?
在我看来,扩展加载到页面中的每个页面模块都有自己的全局范围/命名空间,这阻碍了代码共享。但是,文档似乎表明同一页面中的内容脚本应该能够直接相互访问:
加载到同一文档中的内容脚本可以直接相互交互,也可以与 Web 内容本身交互。
加载到同一个文档中的内容脚本可以直接相互交互,也可以与 Web 内容本身交互,只要它们是通过同一个 PageMod 实例加载的。
这就是为什么 PageMod 的 contentScriptFile 选项采用一个可以列出多个文件的数组,以便您可以加载例如 jQuery,然后在您自己的单独代码中使用 jQuery。
不起作用的是为多个 PageMod 实例提供一些共享范围,因为每个 PageMod 都加载到单独的沙箱中。
如果您需要简单的通信,一个可能的 wqorkaround 方法是通过 SDK 的 EventEmitter 'port' 对象从单独的 PageMod 实例路由消息。
不幸的是,没有办法在沙箱之间共享脚本资源,因为没有共享的跨沙箱范围。