Google chrome extension 从内容脚本注入脚本。窗口对象不可用

Google chrome extension 从内容脚本注入脚本。窗口对象不可用,google-chrome-extension,Google Chrome Extension,我试图在内容脚本中向页面注入脚本 注入的脚本应该在窗口-对象上定义一个对象abc。但是,加载注入的脚本后,尝试从内容脚本读取会导致window.abc=undefined 这是否可能是因为内容脚本存在于中?乍一看,这似乎很奇怪,因为我希望内容脚本和从内容脚本动态注入的脚本生活在同一个环境中(从而共享同一个窗口对象) 背景:作为扩展的一部分,我需要在各种各样的页面上加载内容脚本。要为这些页面中的每一页加载大型脚本,即使该扩展可能一开始就不在该页面上使用,这似乎完全是对带宽/性能的浪费。因此,我希望

我试图在内容脚本中向页面注入脚本

注入的脚本应该在
窗口
-对象上定义一个对象
abc
。但是,加载注入的脚本后,尝试从内容脚本读取会导致
window.abc=undefined

这是否可能是因为内容脚本存在于中?乍一看,这似乎很奇怪,因为我希望内容脚本和从内容脚本动态注入的脚本生活在同一个环境中(从而共享同一个窗口对象)


背景:作为扩展的一部分,我需要在各种各样的页面上加载内容脚本。要为这些页面中的每一页加载大型脚本,即使该扩展可能一开始就不在该页面上使用,这似乎完全是对带宽/性能的浪费。因此,我希望内容脚本尽可能轻量级,并且在用户表示希望在所述页面上使用扩展时,只加载(延迟加载)较重的脚本(使用如上所述的注入)。(通过选择一些事件,例如单击扩展图标)

您的假设是正确的。文档中非常清楚地指出,您甚至将自己链接到:

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但不适用于页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行

直接在页面上运行的脚本使用页面的环境(窗口),即使您从内容脚本将其注入页面

调试提示: Chrome开发者工具控制台允许您在页面上下文和内容脚本的上下文之间切换。您应该能够看到
窗口。abc
是在页面的(可能是
top
)窗口中定义的,而不是在内容脚本的窗口中定义的

我不确定您的确切目标是什么,但如果您想在单击扩展图标后在页面上执行某些操作,您可以通过以下方式完成。没有必要事先在页面中插入任何内容


进一步阅读SO:


你的假设是正确的。文档中非常清楚地指出,您甚至将自己链接到:

内容脚本在称为隔离脚本的特殊环境中执行 世界。他们可以访问所注入页面的DOM, 但不适用于页面创建的任何JavaScript变量或函数。 对于每个内容脚本,它看起来就像没有其他JavaScript一样 在运行它的页面上执行

直接在页面上运行的脚本使用页面的环境(窗口),即使您从内容脚本将其注入页面

调试提示: Chrome开发者工具控制台允许您在页面上下文和内容脚本的上下文之间切换。您应该能够看到
窗口。abc
是在页面的(可能是
top
)窗口中定义的,而不是在内容脚本的窗口中定义的

我不确定您的确切目标是什么,但如果您想在单击扩展图标后在页面上执行某些操作,您可以通过以下方式完成。没有必要事先在页面中插入任何内容


进一步阅读SO:


>直接在页面上运行的脚本使用页面的环境(窗口),即使您从内容脚本将其注入页面。我不清楚上面的内容。感谢>直接在页面上运行的脚本使用页面的环境(窗口),即使您从内容脚本将其注入页面。我不清楚上面的内容。谢谢