javascript - 内容脚本是在同一个孤立的世界中运行,还是在不同的孤立世界中运行?

标签 javascript jquery google-chrome google-chrome-extension

我正在通读 Chrome 文档,试图了解如何创建扩展程序,并且正在努力了解如何在内容脚本之间共享数据。

假设我的扩展捆绑了三个脚本:

jquery.js
script1.js
script2.js

我需要script1.jsscript2.js来使用jQuery,每个脚本都需要能够读写全局变量ala window.foo = '酒吧'

脚本还将内容添加到事件驱动的 DOM,因此只要选项卡打开,它们读取/写入的全局变量就需要持久化。

例如,script1.js 可能会向页面添加一个按钮,单击该按钮会运行 script1.js 中定义的函数,该函数又会设置一个全局变量并然后在 script2.js 中运行一个函数,然后使用该变量(只是一个例子)。

The content script docs说:

However, content scripts have some limitations. They cannot:

  • ...
  • Use variables or functions defined by their extension's pages
  • Use variables or functions defined by web pages or by other content scripts

这是否意味着扩展程序的内容脚本根本无法相互交互,或者说来自不同扩展程序的内容脚本无法相互交互?

换句话说,所有的扩展内容脚本是在同一个孤立的世界中运行,还是在不同的孤立世界中运行?

最佳答案

每个扩展、每一帧都有一个执行上下文。

如果您在同一个框架中注入(inject)多个脚本,它们将完全共享上下文(查看彼此的变量等)

DOM 在所有上下文中共享。这使得与 custom events 的跨上下文通信成为可能.

跨框架(或交叉表)通信通常需要一个后台脚本作为消息或类似 window.postMessage 的代理。 .

关于javascript - 内容脚本是在同一个孤立的世界中运行,还是在不同的孤立世界中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333350/

相关文章:

javascript - 如何用JavaScript控制多个音频播放器?

javascript - 如果在表单提交期间未选中复选框,那么它将变为红色

reactjs - 永远显示 "lighthouse is warming up"

javascript - 添加了 .on ('click' 的 CSS 类)在第一个事件后不可见

javascript - 如何记录图层要素上请求的坐标

javascript - 在javascript中获取文本框的值

javascript - 使用 javascript 或 jquery 验证价格范围

javascript - JSFiddle 代码在我自己的页面中不起作用

javascript - 如何让项目默认隐藏然后用 jquery 按钮显示?

javascript - 三.聚光灯只能阴影替换吗?