【问题标题】:HTTP redirect in iframe instead of redirecting in the parent windowiframe 中的 HTTP 重定向而不是父窗口中的重定向
【发布时间】:2014-02-16 11:46:53
【问题描述】:

我正在开发一个 Web 应用程序。 在这个 Web 应用程序中,我必须从 iframe 中的不同服务器(例如:www.xyz.com)加载网页。但有时当我尝试从 iframe 中的某个不同服务器加载网页时,服务器会使用 Location 标头字段中的重定向链接以 HTTP 状态代码 302(代表重定向)进行响应。发生这种情况时,主窗口(我的网络应用程序)被重定向,而不是仅在 iframe 中发生重定向。如何确保重定向只发生在 iframe 而不是主窗口中?

【问题讨论】:

  • 仅服务器端重定向是不可能的。我敢打赌,您包含在 iframe 中的网站对此有特殊保护,当它检测到它只是使用 javascript 退出 iframe 并重新加载父级时。您可以做的最好的事情是与您尝试在 iframe 中显示的网站的所有者交谈。

标签: javascript html redirect iframe web-applications


【解决方案1】:

使用沙盒="..."

  • allow-forms 允许提交表单
  • allow-popups 允许弹出窗口
  • allow-pointer-lock 允许指针锁定
  • allow-same-origin 允许文档保持其来源
  • allow-scripts 允许 JavaScript 执行,也允许特性自动触发
  • allow-top-navigation 允许文档通过导航顶级窗口来跳出框架

顶部导航是您想要阻止的,因此将其排除在外,这样就不会被允许。任何遗漏的内容都会被屏蔽

例如。

        <iframe sandbox="allow-same-origin allow-scripts allow-popups allow-forms" src="http://www.example.com"</iframe>

【讨论】:

  • 这不会在 iframe 中导航,而是会弹出一个实际的弹出窗口。不要认为这是问题。
【解决方案2】:

问题不在于您的重定向,而在于之前发生的事情:我想用户正在通过POST 提交表单,并且网络服务器根据最佳实践回复了 302 重定向。

如果&lt;form&gt; 具有指向另一个页面的action 属性,则其答案将重定向top iframe。我找不到任何说明该行为的参考文档,但这就是它在当前浏览器中的工作方式。

解决方法是将target属性设置为_self

<iframe>
    ...
    <form action="http..." target="_self" >
    ...
</iframe>

sandbox 属性在这里没有用,您可能希望省略该属性或至少设置 allow-forms allow-navigation

【讨论】:

    【解决方案3】:

    当我设置 target="iframe_name" 时它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2019-03-18
      • 1970-01-01
      相关资源
      最近更新 更多