我在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);
他们似乎都没有带来预期的结果,因为他们甚至没有列出我的全局变种。
答案 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);
}
}
};