Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Redirect after iframe reload (https://javascript.ru/forum/misc/42308-redirect-after-iframe-reload.html)

amigo* 21.10.2013 18:32

Redirect after iframe reload
 
Здравствуйте. Есть страничка, внутри которой находится iframe. В этом айфрейме есть кнопка. При нажатии кнопки на серверной стороне меняется контент айфреймовского сорса. Т.е. линк в iframe src остаётся тем же, что и был, но теперь по линку в src совершенно другой контент. Далее происходит reload айфрейма и контент меняется на новый.

У меня есть возможность вставлять js код в страничку, которая указана в iframe src (до reload).
Есть ли возможность сделать redirect _после_ reload? Не суть redirect, можно ли выполнить любой другой код автоматически после redirect? Пускай через setInterval и проверять изменился контент или нет.

Пробовал зацепиться так :
1)
Код:

    $("#" + iframeId).load(function () {
        alert(1)
    })

2)
Код:

var c = window.top.document.getElementById(iframeId);

c.__appendChild = c.appendChild;
c.appendChild = function(){
    alert('new item added');
    c.__appendChild.apply(c, arguments);
}

3)
Код:

window.top.document.getElementById(iframeId).contentWindow.setTimeout(function () {alert(555)}, 1500)
4)
Код:

window.top.setTimeout(function () {alert(555)}, 1500)
Все вышеуказанные попытки провалились. Как только произошёл reload все скрипты от предыдущей страницы теперь не работают.

=========
Спасибо!

Deff 21.10.2013 20:02

Цитата:

Сообщение от amigo*
Все вышеуказанные попытки провалились. Как только произошёл reload все скрипты от предыдущей страницы теперь не работают.

Если фрейм на том же домене, то можно так затестить URL фрейма
<iframe src="http://javascript.ru/forum/" name="myframe" height=500 width=100% onload="alert(myframe.window.document.URL)">

amigo* 22.10.2013 13:24

Цитата:

Сообщение от Deff (Сообщение 277517)
Если фрейм на том же домене, то можно так затестить URL фрейма
<iframe src="http://javascript.ru/forum/" name="myframe" height=500 width=100% onload="alert(myframe.window.document.URL)">

Видимо я недоступно объяснил суть вопроса :( . Потому, что, к сожалению, не могу понять зачем мне тестить URL.
Ещё раз.
* Есть html страничка (main.html):
<html>
	<head>
	</head>
	<body>
		<iframe id = "idIframe" src="iframehtml.html">			
		</iframe>		
	</body>
</html>

* Рядом в той же папке на сервере лежит iframehtml.html (страница, на которую ссылается iframe выше):
<html>
	<head>	
		<script type=text/javascript src=jquery-1.5.min.js></script>
	</head>
		<body>
			<div>
				Iframe html body
			</div>
			<input type=button id=goBtn value=go onclick="process()" />
			<script type=text/javascript> 
				function process() {
					beforeAction();
					//После перехода на process.html полностью изменится контент файла iframehtml.html
					$.get("/testiframe/process.html");
					setTimeout(function () {						
						window.top.document.getElementById("idIframe").contentDocument.location.reload(true);						
					}, 5000)					
				}

				function beforeAction() {
					window.top.setInterval(function () {console.log(new Date())}, 1000);

					var c = window.top.document.getElementById("idIframe");					

					c.__appendChild = c.appendChild;
					c.appendChild = function(){
						 alert('new item added');
						 c.__appendChild.apply(c, arguments); 
					}

					$("#idIframe").load(function () {
						alert(1)
					})

				}
			</script>
		</body>
</html>

* В iframehtml.html есть кнопка, по нажатию на которую, сабмитятся поля в айфрейме и контент файла iframehtml.html полностью изменяется со стороны сервера. Со стороны же клиента происходит reload и контент обновляется (Предположительно через window.top.document.getElementById("idIframe").con tentDocument.location.reload(true))
* У меня нет доступа к main.html и iframehtml.html. Но со стороны сервера я могу писать код, который при загрузке страниц попадёт в функцию beforeAction().
* Вопрос. Могу ли я написать такой код (какой?) в функции beforeAction, чтобы при reload айфрейма я всё ещё имел контроль над выполнением кода. Т.е., например, в идеале хотелось бы добавить setInterval для main.html, который бы каждые 500 мс проверял бы содержимое айфрейма, и как только он перезагрузится полностью, то я мог бы сделать redirect или выполнить ещё какой-то код.

amigo* 22.10.2013 17:11

Разобрался. Нужно создать свою html страницу, открывать её в beforeAction() через window.open(). А уже из открывшегося окна можно установить setInterval и отслеживать контент в айфрейме родительского окна. Таким образом скрипт запущенный из айфрейма будет работать и после его перезагрузки.


Часовой пояс GMT +3, время: 01:38.