控制 iframe 视为 window.top 的内容?

Posted

技术标签:

【中文标题】控制 iframe 视为 window.top 的内容?【英文标题】:control what iframe sees as window.top? 【发布时间】:2017-06-29 02:09:45 【问题描述】:

有一个 Web 应用程序通过将不同的 iframe 加载到自身中来工作。它提供了一些子 iframe 挂钩的代码。

子 iframe 访问 window.top 而不是 window.parent 并且不受我控制。一切正常。

现在,我想将该应用程序作为 iframe 包含在另一个站点中。该应用程序不需要任何“父”或“顶部”访问此其他站点。但是,当该应用程序的子 iframe 执行 window.top 时,它们最终以“顶部”为另一个站点,而不是应用程序。

理想情况下,我希望 window.top(在子 iframe 中)表示“该应用程序”,而不是“在 iframe 中包含该应用程序的其他网站”。

window.top 似乎是只读的。我有哪些选择?

编辑:我拥有对该应用程序和其他站点的完全访问权限。只有该应用程序中的子框架是固定的。

作为可能解决方案的示例:

    让该应用程序将假窗口对象插入到子框架中,其中 .top 引用该应用程序。 通过服务器端代理传递所有文件,该代理每次都动态重写子框架的代码。

编辑 2:因此,“解决方案”是将 .top 替换为 .parent,或者如果进一步嵌套在框架集中(有时是这种情况),则替换为 .parent.parent。现在,当用户将他们的 html/js(被 iframed)上传到该应用程序的 CMS 时,我可以这样做。然后代码永远不会一直上升到另一个站点。仍在寻找更多不涉及修改磁盘文件的选项。

【问题讨论】:

你无法控制。 我有同样的问题 - 一个使用 window.top 的 iframe 页面,我想将整个内容放入 iframe... 【参考方案1】:

您无法控制 window.top 是什么,它始终是顶部窗口。如果您可以访问要嵌入应用程序的页面的代码,那么您可以将信息从您的应用程序传递给它(取决于您使用 window.top 的目的)。

如果您只需要从中读取一些信息或让它监听一些事件,您可以使用postmessage 将信息从应用程序框架中继到父框架(被检测为window.top , 但否则你就不走运了

【讨论】:

实际上,我看到有人自己制作了窗口对象来替换窗口对象并将顶部设置为其他东西。所以有选择。还编写代码以将每个项目下载为文本,动态更改对 window.top 的引用并对其进行评估。我不是不走运。我正在寻找最佳解决方案。 我不会推荐这些东西

以上是关于控制 iframe 视为 window.top 的内容?的主要内容,如果未能解决你的问题,请参考以下文章

window.top

session登录超时跳出iframe页至登录窗口

window.parent window.top及window.self 详解

window.parent ,window.top,window.self 详解

Js中的window.parent ,window.top,window.self 了解

JS防止页面被其他网站iframe使用方法