У меня есть iframe. При нажатии на определенную ссылку внутри iframe происходит проверка ошибки, на стороне сервера и последующем перенаправление происходит со стороны сервера. Теперь перенаправление вызывает загрузку страницы внутри iframe. Есть ли способ сделать перенаправление на родительской странице? Я знаю, что это возможно, если это проверка на стороне клиента. Но это проверка на стороне сервера, и команда перенаправления происходит с сервера. В перенаправлении я также загружаю атрибут ошибки, который появляется как div с ошибкой. Даже это загружается внутри iframe. (Iframe внутри iframe с ошибкой div).
Вот код, на который ссылается @mavrosxristoforos в комментариях. Используйте вместо header()
PHP header()
или любого другого перенаправления, который вы можете использовать.
<script type="text/javascript">
window.parent.location.href= "http://your-redirect-url-here";
</script>
скажем, A - это ваша родительская страница, а B - дочерняя страница внутри фрейма.
при сбое проверки сервера не перенаправляются на страницу A, а B или на страницу с ошибкой C!
это скорее хак, я полагаю, если вы можете сделать хэш-обмен
Если вы не хотите изменять выход сервера, но ищете быстрое и грязное решение, вы можете сделать что-то вроде этого:
См.: iFrame src change event detection?
Вы можете проверить местонахождение перенаправленной страницы (если это имеет значение), и, когда IFRAME изменит местоположение во второй раз (так как первое будет при загрузке IFRAME изначально), вы можете перенаправить свое главное окно на страницу представляет интерес.
(Я думаю, мы могли бы также задать вопрос: почему IFRAME вместо использования запроса Ajax для проверки ввода?)
Вы можете общаться между основным окном и iframe, только если они используют один и тот же протокол!
"Правильный" способ сделать это - использовать postMessage. Вы можете найти два примера использования здесь и здесь. Так долго для правильного пути.
Быстрая и грязная:
В следующем примере внешнее окно имеет функцию JS, называемую change(), которая вызывается каждый раз, когда 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>