我正在创建一个Chrome扩展程序,将script
标记附加到页面,然后使用该外部脚本中定义的代码:
$('body').append('<script src="..."></script><script>console.log(SomeObject)</script>');
SomeObject
在外部脚本中定义,所以我应该可以访问它,对吧?好吧,我不能,因为我得到一个“未定义”的错误。
我甚至尝试使用head.js
加载外部脚本并在加载脚本后执行函数,但无济于事。
如果我打开Chrome控制台,我可以正常访问该死的对象!!!
我在后台页面中尝试了内容脚本和executeScript
无济于事。在两者上,如果我使用console.log(window)
,我可以检查控制台中的window
对象,并且SomeObject
无处可寻。如果我检查Chrome控制台上的window
对象,那就是它!
注入的脚本是以某种方式沙盒化了什么还是给出了什么?
谢谢!
答案 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
可以访问其父文档)来破解它。