【问题标题】:How to fool Iframe that it is top most window如何欺骗 iframe 它是最顶层的窗口
【发布时间】:2023-04-09 12:52:01
【问题描述】:

我想知道,有没有办法覆盖 iframe 的 window.top 和 window.parent 使得从它的上下文来看,以下是正确的

window === window.parent && window === window.top

情况是我想嵌入到 iframe 中的应用程序有许多对 window.top 的引用,它存储对象并使用它们与自己的子 iframe 来回通信。

<iframe sandbox=""></iframe>

没有“允许脚本”对我来说不是一个选项,因为对 window.top 的任何访问都会引发和错误,而我希望事情就像 iframe 是顶级窗口一样工作

注意: 我看到一个类似的问题被问到How to Trick/Fool an Iframe to thinking its the TOP element in DOM,但是虽然有同样的要求,但实际的问题 - 改变 top.location 可以解决,这就是我猜讨论被终止的原因。

【问题讨论】:

  • 可能很天真,但在 iframe 中运行 window.top=window; 会起作用吗?
  • 我建议不要欺骗系统,如果您需要在有专利窗口和没有专利窗口的情况下重复使用相同的代码,请将它们全部替换为一个变量并将其设置为您想要的那个每次。
  • 找到了一些可能有帮助的东西(如果有,请告诉我):github.com/atom/electron/issues/656#issuecomment-57743689
  • 感谢提示@dandavis 设置 window.top=window 不起作用,因为 top 是只读的 (w3schools.com/jsref/prop_win_top.asp) 所以它没有效果
  • @LGSon 不幸的是,修改代码不是一种选择,因为它是我无法控制的第 3 方应用程序。同样使用沙盒选项,iframe 仍然可以使用 window.top 访问最顶层的窗口,它不允许从 iframe 导航

标签: javascript html iframe


【解决方案1】:

简单的答案是不,您不能更改只读属性。

更复杂的答案是您可以通过代理服务器解析其他站点并动态重写 JS。但是,我强烈认为这比付出的努力更多,并且可能会在某些时候违反版权法。

您应该问的问题是第三方是否希望出现在您的 iFrame 中?如果是,让他们修复他们的代码,如果不是,那么你不应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多