【问题标题】:Chrome Extension: Injecting external scriptChrome 扩展:注入外部脚本
【发布时间】:2011-10-03 04:53:57
【问题描述】:

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

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

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

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

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

    我敢打赌,当您立即调用该脚本时,它并没有加载,这行得通吗:

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

    【讨论】:

    • 我也是这么想的,所以我尝试使用head.js。但我也尝试了你的建议,但它仍然不起作用:(
    【解决方案2】:

    这终于奏效了:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 2016-06-16
        • 1970-01-01
        • 2022-11-07
        • 1970-01-01
        相关资源
        最近更新 更多