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