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

5
有一个网络应用程序,它通过加载不同的iframe进入自身来工作。 它提供一些代码,子iframe钩入其中。
子iframe访问window.top而不是window.parent,这是我无法控制的。 一切正常运作。
现在,我想将该应用程序作为iframe包含在另一个站点中。 该应用程序不需要访问此其他站点的“parent”或“top”。 然而,当该应用程序的子iframe执行window.top时,它们的“top”会成为其他站点,而不是该应用程序。
理想情况下,我希望window.top(在子iframe中)意味着“该应用程序”,而不是“将该应用程序包含在iframe中的其他站点”。
似乎window.top是只读的。 我有哪些选项?
编辑:我完全可以访问该应用程序和其他站点。 只有该应用程序内部的子框架是固定的。
可能的解决方案示例:
1. 让该应用程序向子框架插入虚假的window对象,其中.top指向该应用程序。 2. 将所有文件传递到服务器端代理,每次动态重写子框架的代码。
编辑2:因此,“解决方案”是将.top替换为.parent,或者如果更深嵌套在frameset中,则是.parent.parent(有时候是这种情况)。 目前,当用户上传其HTML / js(被iframed)到该应用程序的CMS时,我可以执行此操作。 然后,代码永远不会上升到其他站点。仍在寻找不涉及修改磁盘上的文件的更多选项。

你无法控制那个。 - epascarello
我有同样的问题 - 一个带有iframes的页面使用window.top,并且我想将整个内容放入一个iframe中... - Tim Holt
1个回答

0

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

如果你只需要从中读取一些信息或让它监听某些事件,则可以使用postmessage将信息从应用程序框架中转发到父框架(被检测为window.top的框架),否则你就没有办法了。


实际上,我看到有人制作了自己的窗口对象来替换窗口对象,并将顶部设置为其他内容。因此有选择。还可以编写代码以将每个项目作为文本下载,动态更改对window.top的引用,并进行eval操作。我并不是没有办法。我正在寻找最佳解决方案。 - AwokeKnowing
我不会推荐这两件事情。 - Pabs123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接