我有一个 iframe。单击 iframe 内的特定链接时,会在服务器端发生错误验证,随后从服务器端发生重定向。现在,重定向会导致页面加载到 iframe 中。有什么方法可以使重定向发生在父页面上?如果它是客户端验证,我知道它可以做到这一点。但这是服务器端验证,重定向命令从服务器发生。在重定向中,我还加载了一个显示为错误 div 的错误属性。即使这也会被加载到 iframe 中。(带有错误 div 的 iframe 内的 iframe)。
问问题
3541 次
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第二次更改位置时(因为第一次是 IFRAME 最初加载时),您可以将主窗口重定向到页面出于兴趣。
(我想我们也可以问一个问题:为什么使用 IFRAME 而不是使用 Ajax 请求来验证输入?)
于 2013-09-20T05:05:32.943 回答