【问题标题】:Is there a way to prevent an iframe from redirecting parent window, but in such a way that "top level" redirects still work inside the iframe itself?有没有办法阻止 iframe 重定向父窗口,但是“顶级”重定向仍然在 iframe 本身内部工作?
【发布时间】:2014-11-15 11:37:17
【问题描述】:

所以我已经阅读了HTML5 sandbox property 并且我知道如果我想阻止 iframe 重定向其父窗口,我可以使用 sandbox 属性将 allow-top-navigation 排除在外。但是,完成此操作后,如果 iframe 最初依赖于顶级重定向,则取而代之的是它重定向到空白页面,从而有效地破坏了导航。

我能否阻止 iframe 修改其父窗口,同时仍允许“顶级”重定向,只让这些在 iframe 的上下文中工作而不是顶级?

编辑:就上下文而言,我正在与第三方合作,其页面有一个带有目标_top 的表单。如果 iframe 被沙盒化,在提交表单时用户会得到一个空白页面,如果它没有被沙盒化,整个页面将被重定向。我正在寻找可以提交表单并在 iframe 本身中显示结果的东西。

【问题讨论】:

  • 您确定重定向的内容在 iframe 中仍然有效吗?例如,如果您尝试对 PayPal 付款页面执行此操作,它会中断。
  • 如果 IFrame sandbox 属性具有诸如 allow-top-navigation-here 之类的值,这将导致 IFrame 被用作 window.top 操作的目标,那就太好了。
  • 你找到解决这个问题的方法了吗?
  • @geo 之类的,我求助于在弹出窗口中加载内容(例如,通过window.open 的实际单独窗口),这符合我的需要,但我没有找到纯 iframe 解决方案。
  • 2019年有解决这个问题的办法吗?快到 2020 年了

标签: javascript html redirect iframe


【解决方案1】:

HTML5 添加了iframe sandbox 属性。

在撰写本文时 works on Chrome, Safari, Firefox and recent versions of IE and Opera 几乎可以满足您的需求:

允许将 iframe 内容视为与包含文档来自同一来源

<iframe src="url" sandbox="allow-same-origin"></iframe>

浏览器兼容性


一些有用的链接

【讨论】:

    【解决方案2】:

    您可以使用onbeforeunload 属性来确定是否要重定向。

    Here is the docs page for it

    基本上我会尝试这样:

    • 创建一个函数,将沙盒属性添加到 iframe 中,只需省略 allow-top-navigation 即可
    • 将函数绑定到 iframe 的 onbeforeunload 属性,该函数调用添加沙盒属性的函数(确保不要返回任何内容,因为会弹出一个对话框)

    这应该可行,因为请求首先在 iframe 中发出,然后我们可以防止它传递到我们的顶级窗口。

    您应该检查的另一件事是您是否可能遗漏了allow-forms选项,这可能会导致您所描述的内容。

    请让我知道这是否有效。

    【讨论】:

    • 我尝试了你的建议,但是当allow-top-navigation 被排除在外时,onbeforeunload 似乎没有触发。
    • 但是等等,如果您在onbeforeunload 事件本身(对于 iframe)中添加了沙盒属性,它就不可能不被触发。我 80% 的另一种方法是:通过 javascript/jQuery,当 iframe 完成加载时,选择表单元素并将目标属性更改为 _self
    • 默认情况下,不包括allow-top-navigation意味着在顶层不会发生重定向,这反过来不会触发onbeforeunload
    • 但是您是否尝试过更改相关表单的目标属性?
    • 您应该向第三方供应商提出此问题。表单的目标听起来应该是在 iframe 中加载页面的查询字符串中的某种可配置选项。
    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2023-04-02
    • 2014-02-16
    • 2012-11-22
    • 2015-06-24
    相关资源
    最近更新 更多