我在 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);
它们似乎都没有带来预期的结果,因为它们甚至没有列出我的全局变量。
最佳答案
您收到跨域错误,因为窗口(全局)对象上的某些属性在 iframe 中不可访问,假设您应该被允许访问您尝试读取的全局变量(因为它在 iframe 本身中) ,您可以将循环的内部部分包装在 try catch block 中,这样它会在访问被拒绝后继续。 见代码:
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);
}
}
};
关于Javascript:列出同一范围内的所有变量(iframe),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064605/