我有一个iframe。单击iframe内的特定链接时,将发生错误验证,服务器端以及随后从服务器端发生重定向。现在,重定向导致页面加载到iframe中。 有没有办法让重定向发生在父页面上?我知道如果它是客户端验证可以做到这一点。但这是服务器端验证,重定向命令来自服务器。在重定向中,我还加载了一个错误属性,该属性显示为错误div。甚至这会加载到iframe中。 (带有错误div的iframe内的iframe)。
答案 0 :(得分:1)
以下是@mavrosxristoforos在评论中提到的代码。用来代替PHP header()
或您可能使用的任何重定向。
<script type="text/javascript">
window.parent.location.href= "http://your-redirect-url-here";
</script>
答案 1 :(得分:0)
只有在使用相同的协议时,您才能在主窗口和iframe之间进行通信!
这样做的“正确”方法是使用postMessage。您可以找到两个使用示例here和here。这么长的路要走。
快速而肮脏:
在下面的示例中,外部窗口有一个名为change()的JS函数,每次重新加载iframe时都会调用该函数。您可以使用它来检测仅在发生错误时显示的div - 然后重定向。以下示例重定向到ycombinator网站。您可以查看here
<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>
答案 2 :(得分:0)
如果您不想更改服务器的输出但是正在寻找快速而肮脏的解决方案,那么您可以执行以下操作:
请参阅:iFrame src change event detection?
您可以检查您重定向到的页面的位置(如果这很重要),以及当IFRAME第二次更改位置时(因为第一次加载IFRAME时的第一次) )您可以将主窗口重定向到感兴趣的页面。
(我想我们也可以问一个问题:为什么IFRAME而不是使用Ajax请求来验证输入?)
答案 3 :(得分:0)
如果你能够进行哈希交换,我认为这更像是一种黑客行为说A是你的父页面,B是框架内的子页面。
服务器验证失败时不会重定向到页面A但是B或错误页面C!