| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > Как достать перем. JS из IFRAME ? |
| Автор: Ciber SLasH 20.6.2005, 02:45 | ||||
| Никак не получается достать массив из документа, загруженного в IFRAME. Допустим есть 2 файла: index.htm:
test.htm:
и вот как теперь из index.htm прочитать массив mas, который загружен в IFRAME ? |
| Автор: Black 20.6.2005, 11:52 | ||||
| Ciber SLasH может создать функцию в test.htm, которая возвращала бы массив???
А вызывать в index.htm так:
В NeedArray массив P.S: все писал от руки не проверял... поэтому могут быть ошикбки. |
| Автор: Ciber SLasH 21.6.2005, 06:54 |
| Поискав в сети инфу по запросу "contentDocument" наткнулся на статью, в которой говорится, что из документа, в котором есть IFRAME, не добраться до данных документа, загруженных в этот IFRAME. Источник: http://www.kruglov.ru/articles/nontrivialjs/ |
| Автор: Black 21.6.2005, 09:41 |
| Ciber SLasH Почему нельзя, можно Под ИЕ и Мозиллой нужно обращатся IFRAME.contentWindow.document. Под Opera так: parent.IFRAME.document. Где IFRAME - id фрейма. |
| Автор: Black 21.6.2005, 09:55 |
| А Круглов человек странный он все еще считает что есть люди которые пользуются Оперой 5, 6. Вот в них возможно и нельзя. |
| Автор: Ciber SLasH 21.6.2005, 09:55 | ||
Всё это я пробовал -- нифига не получилось. Проведи эксперимент с поими 2-мя документами. |
| Автор: Black 21.6.2005, 09:59 | ||||
В lala4.html
|
| Автор: Black 21.6.2005, 10:18 |
| Кстати, данный пример работает и в новой Opere 8.01 Вероятно, сделали поддержку стандартного обращения. |
| Автор: Ciber SLasH 21.6.2005, 10:44 |
| 2PHP-DIRECTOR: Хм, я ведь делал тоже самое по сути, но у меня ничего не получалось. Скорее всего из-за того, что я сразу пытался "достучаться" до содержимого IFRAME'а, а он ещё не успевал подгрузиться. Т.е. если ставить на кнопку функцию обработки, но всё ништяк. 10х, натолкнул на мысль... (с меня флюс |
| Автор: Ciber SLasH 21.6.2005, 20:11 | ||||
| Появилась кой-какая проблема. В Firefox этот код не работает: index.htm:
test.htm:
Как только загружается index.htm, должна показываться надпись: IFRAME content is: "...". Проверял в IE и Opera -- здесь всё нормально, а вот Лису рогом упёрлась. Как победить? |
| Автор: Black 21.6.2005, 21:05 | ||||
| Ciber SLasH ох ты мне и задачку дал :-) Двадцать минут тупо смотрел на скрипт все ок... потом глянул на ифрейм и со стула упал
замени на:
Вот и весь прикол |
| Автор: Ciber SLasH 21.6.2005, 22:53 |
| Да, это я блин забыл исправить... Исправил, но в Лисе по прежднему не работает. |
| Автор: Sardar 21.6.2005, 23:38 | ||||||||
Нельзя переносить DOM ноды с одного документа в другой напрямую через appendChild, всё остальное можно и даже в "старых" браузерах.
Более страшного изврата я не видел Смотрим и думаем почему это работает
test.htm
|
| Автор: Ciber SLasH 22.6.2005, 02:27 | ||||||
| 2Sardar: 10х за пример Твой пример работает в IE, Firefox, но не работает в Опере. В Опере вот это: ifrm.contentWindow == undefined в ней нужно через: ifrm.contentDocument И появляется загвоздка с вызовом функции из IFRAME. Вот так не пашет в Опере: ifrm_cont.MyFunc() и так тоже: ifrm_cont.window.MyFunc() Можно извратиться, чтобы работало во всех 3-х бродилках, но тогда нужно импортировать скрипт из IFRAME в главный документ:
где элемент с ID='jscode' находится в главном документе:
а элемент с ID='ifr_js' находится в документе IFRAME-a:
Может можно как-то без импорта скрипта обойтись, чтобы работало в этих 3-х бродилках ? |
| Автор: Sardar 22.6.2005, 02:32 |
| Точно, в опере же не существует contentWindow... Лучше не извращаться с текстом скриптов, а вызыват родительские функции из ифрейма: opener.takeValue(mas); |
| Автор: Ciber SLasH 22.6.2005, 02:44 |
| Что-то не работает Пишу: ifrm_cont.opener.MyFunc() или: opener.MyFunc() и то и другое == undefined. |
| Автор: Black 22.6.2005, 10:44 |
| На заметку: в новой Opere 8.01 contentWindow существует, поэтому пример Sardara там успешно работает. Добавили-таки викинги поддержку. Жаль, никто еще Oper'ой 8.01 не пользуется |
| Автор: Sardar 22.6.2005, 22:48 | ||
Нет, ты должен из ифрейма писать opener, рядом с твоим mas |
| Автор: Ciber SLasH 22.6.2005, 23:06 | ||
Всё равно не пашет Пишу в скрипте test.htm: opener.mas = [1, 2]; В index.htm: alert(ifrm_cont.mas) Бродилка ругается: opener есть null |
| Автор: Sardar 22.6.2005, 23:58 | ||||||
Какой кошмар Повторяю ты достаёшь через contentDocument ссылку на document. Глобальным контекстом скриптов являеться window, а получить window из document по моему нельзя. Вывод: не паримся и пишем в родительском окне(index.htm):
В дочернем окне(test.htm):
|
| Автор: Ciber SLasH 23.6.2005, 00:23 |
| Написал так, как ты сказал, но в test.htm opener всегда равен null. Ведь окно, то у нас не открывается, а загружается в IFRAME -- может поэтому opener равен null ? |
| Автор: Sardar 23.6.2005, 00:58 |
| Верно, тогда parent, это точно сработает. А opener по логике вещей не только в открываемых окошках есть. |
| Автор: Ciber SLasH 23.6.2005, 01:53 |
| 10x огромный тебе Sardar !! |
| Автор: Aliance 24.6.2005, 12:33 | ||||
Разве?
Не то? |
| Автор: Sardar 24.6.2005, 20:30 |
| Aliance держи плюс, век живи - век учись |
| Автор: Andre Zak 29.9.2005, 14:11 | ||
Все перечисленное не работает если во фрейм подгружать страницу с внешнего сервера? Проверил, у меня не получилось. Может причиной является:
Или можно как-то это обойти. Мне нужно получить содержимое страницы загруженной во фрейм с внешнего хоста. |
| Автор: Aliance 29.9.2005, 15:15 |
| страницы должны быть с одного домена. Политика безопастности! |
| Автор: Greendrake 8.12.2007, 21:40 | ||||||
Так то же IE & Opera only Пока что придумал только при создании окон и фреймов выполнять в них:
|
| Автор: Ghirik 10.12.2007, 10:29 | ||
| Так долго можно париться, здесь работает... а здесь не работает... Вы укажите браузерам доктип во всех файлах со ссылкой на документ, например так:
обычно это помогает избежать кривое восприятие браузерами "по умолчанию"... P.S. Не заметил второй страницы, отвечал на первую... Хотя, не отказываюсь от своих слов... |