Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доступ к содержимому iFrame (https://javascript.ru/forum/misc/29376-dostup-k-soderzhimomu-iframe.html)

Cylos 25.06.2012 18:15

Доступ к содержимому iFrame
 
Всем привет, столкнулся со странной проблемой. При попытке получить доступ к DIV в iFrame получаю NULL в том случае, если обращаюсь к нему с помощью укороченной записи, т.е.:

var FRAM = document.getElementById("frame");
var DOC = FRAM.contentDocument;


if(DOC == FRAM.contentDocument)
{
	alert(FRAM.contentDocument.getElementById('date'));//выведет Object HTML...
	alert(DOC.getElementById('date'));//выведет null (WTF?)
}


В чем причина такого поведения?

Deff 25.06.2012 18:19

Cylos,
Попробуйте через index фрейма *способов много, но не все кроссбраузерны

window.frames[0].contentDocument.getElementById('date')

Cylos 25.06.2012 18:26

Deff, спасибо, но я сейчас не об этом.
Меня интересует, почему присвоив переменной DOC значение FRAM.contentDocument, я не получаю доступ к фрейму через переменную DOC? Ведь DOC в таком случае является ссылкой на документ фрейма.

Deff 25.06.2012 18:50

Цитата:

Сообщение от Cylos
Меня интересует, почему присвоив переменной DOC значение FRAM.contentDocument, я не получаю доступ к фрейму через

1. Вы не дождались загрузки, без этого FRAM.contentDocument =null
апять жи - лучше =
DOC=window.frames[0].contentDocument

Cylos 25.06.2012 19:02

Deff, нет, причина не в этом, т.к. "прямой доступ" через FRAM срабатывает. И с запуском после окончания загрузки я тоже пробовал, эффект тот же.
P.S. Ваш вариант не работает.

Deff 25.06.2012 19:11

Cylos,
А чо спорить, - Выложите полный код или ссылку

Cylos 25.06.2012 19:17

Я не спорю, я Вам сообщаю, как есть.
Вот код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<body>

		<iframe src='index.php' id='frame'></iframe>
		<script type='text/javascript'>



var FRAM = document.getElementById("frame");
var DOC = FRAM.contentDocument;

document.getElementById("frame").onload = function()
{
	alert(FRAM.contentDocument.getElementById('date'));//выведет Object HTML..
	alert(DOC.getElementById('date'));//выведет NULL(WTF?)
	
}

		</script>


	</body>
</html>

lord2kim 25.06.2012 19:22

Цитата:

Сообщение от Cylos (Сообщение 184020)
Я не спорю, я Вам сообщаю, как есть.
Вот код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<body>

		<iframe src='index.php' id='frame'></iframe>
		<script type='text/javascript'>



var FRAM = document.getElementById("frame");
var DOC = FRAM.contentDocument;

document.getElementById("frame").onload = function()
{
	alert(FRAM.contentDocument.getElementById('date'));//выведет Object HTML..
	alert(DOC.getElementById('date'));//выведет NULL(WTF?)
	
}

		</script>


	</body>
</html>

хм...а если переменные FRAM и DOC в функцию засунуть?

Cylos 25.06.2012 19:28

lord2kim, как ни странно - заработало.
Но ведь переменные созданные вне функции должны быть видимы внутри неё? Почему FRAM работает в обоих случаях, а DOC только, если создать внутри функции?

lord2kim 25.06.2012 19:31

Цитата:

Сообщение от Cylos (Сообщение 184025)
lord2kim, как ни странно - заработало.
Но ведь переменные созданные вне функции должны быть видимы внутри неё? Почему FRAM работает в обоих случаях, а DOC только, если создать внутри функции?

потому что они определены до загрузки iframe...а этих элементов не было в тот момент...


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