Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 找出脚本在哪个iframe中执行_Javascript_Dom - Fatal编程技术网

Javascript 找出脚本在哪个iframe中执行

Javascript 找出脚本在哪个iframe中执行,javascript,dom,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”节点

我有一个带有几个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");
        }
    }
}
for(变量i=0;i
这在所有浏览器中都可以正常工作,但Internet Explorer 6在访问
top[i][j]
时会抛出一个安全错误。关于如何在IE6上解决这个问题有什么想法吗


谢谢

IE似乎不喜欢您访问
try[i]
的任何属性,因为它是不同安全上下文的一部分,即使您访问的属性与脚本处于相同的安全上下文下

你在这里可能不走运。但是,您是否尝试过替换:

  • 试试看
  • 试试[i][j]
与:

  • try.frames[i]
  • try.frames[i].frames[j]

这应该大致相同。这是一个长期的尝试,我不知道它是否有效,但它可能只是。

一位同事找到了解决办法:爬上树

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;
};
var getLastParent=函数(baseWindow、topWindow){
var lastParent,nextParent;
lastParent=nextParent=baseWindow;
while(nextParent!=topWindow&&nextParent!=nextParent.parent){
lastParent=nextParent;
nextParent=nextParent.parent;
}
返回上一个父项;
};
var findWindow=函数(baseWindow、topWindow){
var lastParent=getLastParent(baseWindow、topWindow);
对于(变量i=0;i
是的,我尝试使用frames对象,但效果相同。