我有一个 session 函数,在同一个域上运行良好,但是当它在另一个站点上通过我们的 api 使用时,它不起作用,因为我们正在从顶部框架设置和调用 (top.functionName, top.variable )。我正在寻找一种从仍然保留在域中的最高框架设置变量和调用函数的方法。例如,顶部框架可能是 externaldomain.com,其中的框架可能是 ourdomain.com,而其中的框架可能是 ourdomain.com/somepage 等等。我们如何循环遍历帧以获得最接近仍在同一域中的顶部?
谢谢
最佳答案
以下函数将返回最接近的帧。如果框架不是同源的,则会抛出错误,因为如果读取器来自不同的源,则无法读取 document
属性。
fiddle :http://jsfiddle.net/txmdL/3/
JSfiddle 在两个域上运行:fiddle.jshell.net 和 jsfiddle.net。我在演示中嵌入了多个 fiddle.jshell.net fiddle 。如果脚本按预期工作,单击按钮将显示一个包含 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
- 父窗口不是同源的。将会抛出错误。
关于javascript - 获取仍在域中的最高帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8672721/