0

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

4

4 回答 4

1

这是@mavrosxristoforos 在评论中提到的代码。用于代替 PHPheader()或您可能使用的任何重定向。

<script type="text/javascript">
window.parent.location.href= "http://your-redirect-url-here";
</script>
于 2013-09-20T05:01:49.450 回答
0

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

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

我想这更像是一个黑客,如果你能够做一个 hashchange

  • 当服务器验证失败时,重定向到页面 B,并在 URL 的最后添加 /#notvalid
  • 监听父页面A中携带B的iframe的load事件,检查iframe的src末尾是否有'#notvalid'。如果是,则在父页面中显示错误 div!
于 2013-09-20T05:28:09.487 回答
0

只有当它们使用相同的协议时,您才能在主窗口和 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>
于 2013-09-20T05:04:37.660 回答
0

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

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

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

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

于 2013-09-20T05:05:32.943 回答