2010-05-02 45 views
2

我有一个包含多个iframe的页面。其中一个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数组,并将每个元素与window对象进行比较,该对象当前是“#bar”窗口对象。我的测试代码如下所示:

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中accesing top[i][j]时引发安全错误。任何想法如何解决这个在IE6上?

谢谢!

回答

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; 
}; 
1

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

你可能在这里运气不好。但是,你有没有尝试过更换:

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

有:

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

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

+0

是的,我试过使用帧对象,但它有相同的效果。 – juandopazo 2010-05-03 12:52:12