获取仍在域上的最高帧

时间:2011-12-29 19:51:46

标签: javascript

我有一个在同一个域上运行良好的会话功能,但是当它通过我们的api在另一个网站上使用时,它不起作用,因为我们正在设置并从顶部框架调用(top.functionName,top.variable )。我正在寻找的是一种从仍保留在域上的最高帧设置变量和调用函数的方法。例如,顶部框架可能是externaldomain.com,其中的框架可能是ourdomain.com,其中的框架可能是ourdomain.com/somepage,依此类推。我们如何循环框架以获得最接近仍在同一域上的顶部?

谢谢,

1 个答案:

答案 0 :(得分:4)

以下函数将返回最近的帧。如果帧不在同一原点,则会引发错误,因为如果读者来自不同的原点,则无法读取document属性。

小提琴:http://jsfiddle.net/txmdL/3/
JSfiddle在两个域上运行:fiddle.jshell.net和jsfiddle.net。我在演示中嵌入了多个fiddle.jshell.net小提琴。如果脚本按预期工作,单击该按钮将显示包含http://fiddle.jshell.net/txmdL/3/show/

的对话框
function getClosestTop(){
    var frame = window;
    try {
        while (frame.parent.document !== frame.document) frame = frame.parent;
    } catch(e){}
    return frame;
}

while循环只会在以下情况下中断:

  • 顶部已到达。 top.document !== document将评估为false
  • 父窗口不在同一个原点。将抛出错误。