Chrome扩展程序:注入外部脚本

时间:2011-07-11 22:33:05

标签: javascript google-chrome google-chrome-extension

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

$('body').append('<script src="..."></script><script>console.log(SomeObject)</script>');

SomeObject在外部脚本中定义,所以我应该可以访问它,对吧?好吧,我不能,因为我得到一个“未定义”的错误。

我甚至尝试使用head.js加载外部脚本并在加载脚本后执行函数,但无济于事。

如果我打开Chrome控制台,我可以正常访问该死的对象!!!

我在后台页面中尝试了内容脚本和executeScript无济于事。在两者上,如果我使用console.log(window),我可以检查控制台中的window对象,并且SomeObject无处可寻。如果我检查Chrome控制台上的window对象,那就是它!

注入的脚本是以某种方式沙盒化了什么还是给出了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

这是最终奏效的:

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

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

答案 1 :(得分:1)

我敢打赌,当你马上调用它时,脚本就没有被加载,这是否有用:

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

答案 2 :(得分:1)

所以看起来答案是你不能,由于安全限制:(

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