我有一个包含多个iframe的页面。其中一个iframe有一个来自不同域的页面。在这个iframe中,有一个来自父域的页面的另一个iframe。
my page from mydomain.com
-> an iframe
-> iframe "#foo" from another-domain.com>
-> iframe "#bar" from mydomain.com
-> another iframe
我需要在主页面中获得对“#foo”节点的引用。安全模型应该允许我这样做,因为“#bar”与主页面具有相同的域。所以我正在做的是迭代window.top
数组并将每个元素与当前为“#bar”窗口对象的window
对象进行比较。我的测试代码如下:
for (var i = 0; i < top.length; i++) {
for (var j = 0; j < top[i].length; j++) {
if (top[i][j] == window) {
alert("The iframe number " + i + " contains me");
}
}
}
这适用于所有浏览器,但Internet Explorer 6在访问top[i][j]
时会出现安全性错误。关于如何在IE6上解决这个问题的任何想法?
谢谢!
答案 0 :(得分:1)
看起来IE对您访问try[i]
的任何属性感到不满意,因为它是不同安全上下文的一部分,即使您正在访问的属性与脚本位于相同的安全上下文中。 / p>
你可能在运气不好。但是,您是否尝试过更换:
使用:
这应该或多或少相同。这是一个很长的镜头,我不知道它是否会起作用,但它可能只是。
答案 1 :(得分:0)
一位同事找到了解决方案:转而上树。
var getLastParent = function (baseWindow, topWindow) {
var lastParent, nextParent;
lastParent = nextParent = baseWindow;
while (nextParent != topWindow && nextParent != nextParent.parent) {
lastParent = nextParent;
nextParent = nextParent.parent;
}
return lastParent;
};
var findWindow = function (baseWindow, topWindow) {
var lastParent = getLastParent(baseWindow, topWindow);
for (var i = 0; i < topWindow.length; i++) {
if (topWindow[i] == lastParent)
return i;
}
return -1;
};