Javascript:列出同一范围内的所有变量(iframe)

时间:2014-09-26 16:56:45

标签: javascript iframe scope global-variables

我在iframe中有一些自定义代码,我在其中声明了一个全局变量。在iframe中还有第三方代码,我想访问 globals

问题

广泛地说:是否可以列出与另一个变量在同一范围内的所有变量?

更具体地说:是否可以列出iframe中的所有全局变量,如果其中包含自定义代码?

我尝试了什么

列出我使用的某个范围的所有变量:

var listScopeVars = function(scope) {
    for (var prop in scope) {
        if(scope[prop] && typeof(scope[prop]) != "function") {
            console.log(prop + "=" + scope[prop]);
        }
    }
};

从iframe中我然后调用:

listScopeVars(window); /* throws an cross domain error */
listScopeVars(document); 
listScopeVars(document.body);
listScopeVars(document.documentElement);  

他们似乎都没有带来预期的结果,因为他们甚至没有列出我的全局变种。

2 个答案:

答案 0 :(得分:1)

尝试使用this来引用框架的全局对象。

换句话说,在iframe中执行listScopeVars(this);

答案 1 :(得分:1)

您收到跨域错误,因为在iframe中无法访问窗口(全局)对象上的某些属性,假设您应该被允许访问您尝试读取的全局变量(因为它在iframe中) ,你可以将循环的内部部分包装在try catch块中,这样它将在获得访问被拒绝后继续。 见代码:

var listScopeVars = function(scope) {
for (var prop in scope) {
    try{
      if(scope[prop] && typeof(scope[prop]) != "function") {
          console.log(prop + "=" + scope[prop]);
      }
    }catch(e){
      console.log("Error: "+e.message);
      //or use
      console.error("Error: "+e.message);
    }
  }
};