javascript - 获取仍在域中的最高帧

标签 javascript

我有一个 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/

相关文章:

javascript - HTMLElement.blur 方法在 componentWillReceiveProps 中不起作用

javascript - 如何在更改下拉列表时更改 href url?

javascript - 一旦满足条件,如何停止滴答函数在一帧中执行代码?

javascript - 动态内容注入(inject)的 Webview 限制

javascript - 使用#standardSQL 在 BigQuery 上运行异步 JS 函数

javascript - 未捕获的类型错误 : undefined is not a function

javascript - Jasmine:如何获取当前测试的名称

javascript - MongoDB 回调不会引发引用错误

javascript - 使用 HtmlWebpackPlugin 时 purify-webpack 插件出错

javascript - 根据ajax结果提交表单