从content.js脚本访问DOM var

时间:2015-03-14 14:06:52

标签: google-chrome google-chrome-extension

我试图通过我的谷歌浏览器扩展程序使用content.js脚本访问网页上的全局变量(计时器)。 但是,每次返回undefined时,即使我可以通过开发人员控制台轻松访问它。

var mySocket;
console.log('content.js');

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    switch(request.task){
        case "socketInjection":
            window.setTimeout(
            function(){ console.log(timer);}, 5000);

            break;
    }
  });

我在那里使用了一个setTimeout例程,以确保页面已经完全加载(无论如何都应该这样)。

任何人都有解决方案吗? 提前谢谢,丹尼尔

2 个答案:

答案 0 :(得分:1)

扩展程序和内容脚本都具有与页面不同的全局范围,因此如果页面上的扩展名中有timer = 5之类的内容,那么就是& #39;在内容脚本中可见。

https://developer.chrome.com/extensions/content_scripts

  

但是,内容脚本有一些限制。他们不能:

     
      
  • 使用其扩展程序页面定义的变量或函数
  •   
  • 使用由网页或其他内容脚本定义的变量或函数
  •   

这个答案讨论了一些选择:

Share in-memory objects in Chrome extension content scripts?

答案 1 :(得分:0)

我误解了content.js

的上下文
  

内容脚本在称为隔离的特殊环境中执行   世界。他们可以访问他们注入的页面的DOM,   但不是页面创建的任何JavaScript变量或函数。   它将每个内容脚本视为没有其他JavaScript   在正在运行的页面上执行。反过来也是如此:   页面上运行的JavaScript无法调用任何函数或访问任何函数   由内容脚本定义的变量。

     

隔离世界允许每个内容脚本对其进行更改   JavaScript环境无需担心与之冲突   页面或其他内容脚本。例如,内容脚本   可能包括JQuery v1,页面可能包含JQuery v2,以及它们   不会相互冲突。

     

孤立世界的另一个重要好处是它们完全   将页面上的JavaScript与扩展中的JavaScript分开。   这允许我们为内容脚本提供额外的功能   不要在网页上访问,而不必担心网页   访问它的页面。