找出脚本正在执行的iframe内部

时间:2010-05-02 22:37:43

标签: javascript dom

我有一个包含多个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上解决这个问题的任何想法?

谢谢!

2 个答案:

答案 0 :(得分:1)

看起来IE对您访问try[i]的任何属性感到不满意,因为它是不同安全上下文的一部分,即使您正在访问的属性与脚本位于相同的安全上下文中。 / p>

你可能在运气不好。但是,您是否尝试过更换:

  • 尝试[I]
  • 尝试[i] [j]

使用:

  • try.frames [I]
  • try.frames [I] .frames [j]的

这应该或多或少相同。这是一个很长的镜头,我不知道它是否会起作用,但它可能只是。

答案 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;
};