Javascript 找出脚本在哪个iframe中执行
我有一个带有几个iframe的页面。其中一个iFrame具有来自不同域的页面。在这个iframe中有另一个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”节点
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对象,但效果相同。