在 iframe 中重定向服务器端加载

redirect server side loading inside iframe

本文关键字:服务器端 加载 重定向 iframe      更新时间:2023-09-26

我有一个iframe。单击iframe内的特定链接时,会发生错误验证,服务器端,随后从服务器端进行重定向。现在,重定向会导致页面在 iframe 内加载。有没有办法在父页面上进行重定向?我知道如果是客户端验证,这是可以做到的。但这是服务器端验证,重定向命令从服务器发生。在重定向中,我还加载了一个错误属性,该属性显示为错误div。即使这样也会加载到 iframe 中。(带有错误div 的 iframe 中的 iframe)。

这是@mavrosxristoforos在注释中提到的代码。代替 PHP 的header()或您可能正在使用的任何重定向。

<script type="text/javascript">
window.parent.location.href= "http://your-redirect-url-here";
</script>

如果您不想更改服务器的输出,但正在寻找快速而肮脏的解决方案,则可以执行以下操作:

请参阅:iFrame src 更改事件检测?

您可以检查您重定向到的页面的位置(如果这很重要),并且当 IFRAME 第二次更改位置时(因为第一次是 IFRAME 最初加载时),您可以将主窗口重定向到感兴趣的页面。

(我想我们也可以问一个问题:为什么使用 IFRAME 而不是使用 Ajax 请求来验证输入?

只有当主窗口和 iframe 使用相同的协议时,您才能在它们之间进行通信!

这样做的"正确"方法是使用postMessage。您可以在此处和此处找到两个使用示例。这么久才找到正确的方法。

快速和肮脏:
在下面的示例中,外部窗口有一个名为 change() 的 JS 函数,每次重新加载 iframe 时都会调用该函数。您可以使用它来检测仅在发生错误时显示的div,然后重定向。下面的示例重定向到 ycombinator 网站。你可以在这里查看

<html>
   <head>
   <script type="text/javascript">
     function change(obj){
       var iframe = document.getElementById('iFrm');
       var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
       var obj = innerDoc.getElementById('completed');
       if(obj !== undefined && obj !== null){
           window.location = "https://news.ycombinator.com/";
       }
     }
     </script>         
        </head>
        <body>
         <div class="keuzeDiv">
                <iframe id="iFrm"  src="https://sandbox.plimus.com/jsp/buynow.jsp?contractId=2138644" onLoad="change();" width="100%" height="100%"></iframe>
                </div>
        </body>
</html>

假设 A 是您的父页面,B 是框架内的子页面。

在服务器验证失败时,不要重定向到页面 A,而是重定向到 B 或错误页面 C!

我想这更像是一个黑客,如果你能够进行哈希更改

  • 当服务器验证失败时,重定向到页面 B,并在 URL 的末尾添加/#notvalid
  • 侦听父页面 A 中携带 B 的 iframe 的加载事件,并检查 iframe 的 src 末尾是否有"#notvalid"。 如果是,请在父页面中显示错误div!