Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.06.2012, 18:15
Интересующийся
Отправить личное сообщение для Cylos Посмотреть профиль Найти все сообщения от Cylos
 
Регистрация: 12.03.2009
Сообщений: 18

Доступ к содержимому 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?)
}


В чем причина такого поведения?
Ответить с цитированием
  #2 (permalink)  
Старый 25.06.2012, 18:19
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

window.frames[0].contentDocument.getElementById('date')
Ответить с цитированием
  #3 (permalink)  
Старый 25.06.2012, 18:26
Интересующийся
Отправить личное сообщение для Cylos Посмотреть профиль Найти все сообщения от Cylos
 
Регистрация: 12.03.2009
Сообщений: 18

Deff, спасибо, но я сейчас не об этом.
Меня интересует, почему присвоив переменной DOC значение FRAM.contentDocument, я не получаю доступ к фрейму через переменную DOC? Ведь DOC в таком случае является ссылкой на документ фрейма.
Ответить с цитированием
  #4 (permalink)  
Старый 25.06.2012, 18:50
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от Cylos
Меня интересует, почему присвоив переменной DOC значение FRAM.contentDocument, я не получаю доступ к фрейму через
1. Вы не дождались загрузки, без этого FRAM.contentDocument =null
апять жи - лучше =
DOC=window.frames[0].contentDocument
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2012, 19:02
Интересующийся
Отправить личное сообщение для Cylos Посмотреть профиль Найти все сообщения от Cylos
 
Регистрация: 12.03.2009
Сообщений: 18

Deff, нет, причина не в этом, т.к. "прямой доступ" через FRAM срабатывает. И с запуском после окончания загрузки я тоже пробовал, эффект тот же.
P.S. Ваш вариант не работает.
Ответить с цитированием
  #6 (permalink)  
Старый 25.06.2012, 19:11
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Cylos,
А чо спорить, - Выложите полный код или ссылку
Ответить с цитированием
  #7 (permalink)  
Старый 25.06.2012, 19:17
Интересующийся
Отправить личное сообщение для Cylos Посмотреть профиль Найти все сообщения от Cylos
 
Регистрация: 12.03.2009
Сообщений: 18

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

<!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>

Последний раз редактировалось Cylos, 25.06.2012 в 19:20.
Ответить с цитированием
  #8 (permalink)  
Старый 25.06.2012, 19:22
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

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

<!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 в функцию засунуть?
Ответить с цитированием
  #9 (permalink)  
Старый 25.06.2012, 19:28
Интересующийся
Отправить личное сообщение для Cylos Посмотреть профиль Найти все сообщения от Cylos
 
Регистрация: 12.03.2009
Сообщений: 18

lord2kim, как ни странно - заработало.
Но ведь переменные созданные вне функции должны быть видимы внутри неё? Почему FRAM работает в обоих случаях, а DOC только, если создать внутри функции?
Ответить с цитированием
  #10 (permalink)  
Старый 25.06.2012, 19:31
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ к iframe? vladbir Общие вопросы Javascript 9 21.11.2012 20:05
получить доступ к атрибутам iframe изнутри kichSman jQuery 4 20.04.2012 01:24
Доступ в IFRAME cobria2 (X)HTML/CSS 1 06.02.2012 19:32
Получить доступ к тегам в IFrame vamfirius Events/DOM/Window 6 28.04.2011 00:24
iframe и как получить доступ к его содержимому syegorius jQuery 13 14.04.2011 22:05