Javascript Chrome扩展:注入外部脚本

Javascript Chrome扩展:注入外部脚本,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在创建一个Chrome扩展,它将脚本标记附加到页面上,然后使用该外部脚本中定义的代码: $('body').append('<script src="..."></script><script>console.log(SomeObject)</script>'); $('body').append('console.log(SomeObject)'); SomeObject是在外部脚本中定义的,所以我应该能够访问它,对吗?嗯,我不能,因为我

我正在创建一个Chrome扩展,它将
脚本
标记附加到页面上,然后使用该外部脚本中定义的代码:

$('body').append('<script src="..."></script><script>console.log(SomeObject)</script>');
$('body').append('console.log(SomeObject)');
SomeObject
是在外部脚本中定义的,所以我应该能够访问它,对吗?嗯,我不能,因为我有一个“未定义”的错误

我甚至尝试使用
head.js
加载外部脚本,并在加载脚本后执行一个函数,但没有成功

如果我打开Chrome控制台,我可以很好地访问这个该死的对象

我在背景页面中尝试了内容脚本和执行脚本,但都没有成功。在这两种情况下,如果我使用
console.log(window)
,我可以检查控制台中的
window
对象,并且找不到
SomeObject
。如果我检查Chrome控制台上的
窗口
对象,它就在那里

注入的脚本是否以某种方式被沙盒化了


谢谢

我敢打赌,当您立即调用脚本时,脚本没有加载,这是否有效:

<script src="..."></script><script>setTimeout(function() {console.log(SomeObject)}, 3000)</script>
setTimeout(函数(){console.log(SomeObject)},3000)

这就是最终成功的原因:

var script = document.createElement('script');
script.src = "...";
script.addEventListener('load', function() {
  // SomeObject is available!!!
});
document.head.appendChild(script);

我想知道为什么其他方法都不起作用…

所以答案似乎是,由于安全限制,您不能:(


我不得不使用
iframe
(奇怪的是,
iframe
可以访问它的父文档)。

我也这么认为,这就是为什么我尝试使用
head.js
。但我也尝试了你的建议,但仍然不起作用:(