Просьба разъяснить по javascript - обращение к элементам документа из child-фрейма

R
На сайте с 17.11.2011
Offline
22
4886

Если в документе есть <iframe>, то что нужно для правильного обращения к родительскому документу из фрейма?

Есть parent и есть opener, в то же время есть document и есть window.

Как правильно и в каком порядке обращаться, кто-то может однозначно сказать?

parent.window или parent.opener, или opener.parent.window, или может правильно window.parent, или ........?

домашняя страница - google.com.ua
Хорс
На сайте с 14.12.2010
Offline
21
#1

Содержимое iframe загружается с того же сайта?

R
На сайте с 17.11.2011
Offline
22
#2

да, конечно.

В данное время используется обращение parent.document......

но были замечены некоторые косяки, а частности, если на родительском фреймов два, то если оба загрузились, parent-ом будет то, которое загрузилось последним, хотя им должен быть родительский документ.

Во всяком случае в опере.

Хорс
На сайте с 14.12.2010
Offline
21
#3

Попробовал воспроизвести с использованием jquery.

Два ифрейма, во всех трёх документах есть DIV с id="iftest"

из загружаемого последним документа исполняю:


$(document).ready(function(){
$('#iftest',parent.document.body).html('плохое слово из трёх букв');
});

Что в опере, что во всех других браузерах, команда отрабатывает без глюков, то есть текст меняется только в диве из родительского документа.

R
На сайте с 17.11.2011
Offline
22
#4

jquery <> javascript, если я хоть что-то в этом понимаю.

rommer добавил 21.11.2011 в 21:49

В первых сайтах, которые выдает при поиске гугль, идет речь о

parent.document

window.parent

opener

и даже упоминается document.parentNode

какой из них верный, непонятно.

Хорс
На сайте с 14.12.2010
Offline
21
#5

Ну если jquery перестал быть javascript, то можно и по старинке... суть не меняется. =)

parent.document.getElementById('iftest').innerHTML = 'плохое слово из трёх букв';

Работоспособность прежняя.

R
На сайте с 17.11.2011
Offline
22
#6
Хорс:
Ну если jquery перестал быть javascript, то можно и по старинке... суть не меняется. =)
parent.document.getElementById('iftest').innerHTML = 'плохое слово из трёх букв';

Работоспособность прежняя.

попробуйте загрузить их по очереди, прицепив для каждого фрейма по ссылке с таргетом.

У меня в опере по

parent.document.getElementById
при загрузке первого фрейма код в нем находит родительское окно. При загрузке же второго фрейма код второго фрейма уже не находит родительское.

Одним словом, вы все-таки хотите скахать, что из всех вариантов parent.document это верный?

Хорс
На сайте с 14.12.2010
Offline
21
#7
rommer:
попробуйте загрузить их по очереди, прицепив для каждого фрейма по ссылке с таргетом.

Так и делаю

rommer:

У меня в опере по
parent.document.getElementById
при загрузке первого фрейма код в нем находит родительское окно. При загрузке же второго фрейма код второго фрейма уже не находит родительское.

Не удалось воспроизвести. У меня всё работает (w w w . w e b d e p . n e t /itest.html) 😒

В опере ctrl+shift+i далее консоль, и смотрим в логе вывод DOM родителя, каким его видит вызванный чилд.

rommer:

Одним словом, вы все-таки хотите скахать, что из всех вариантов parent.document это верный?

таки да :) если, конечно, что то не произошло с DOM, за последние сутки.

Может продемонстрируете на примере

R
На сайте с 17.11.2011
Offline
22
#8
Хорс:
Так и делаю


Не удалось воспроизвести. У меня всё работает (w w w . w e b d e p . n e t /itest.html) 😒
В опере ctrl+shift+i далее консоль, и смотрим в логе вывод DOM родителя, каким его видит вызванный чилд.


таки да :) если, конечно, что то не произошло с DOM, за последние сутки.
Может продемонстрируете на примере

Пример показать довольно проблематично.

Но могу сказать, что сделать с вашим примером, чтобы он "заглючил".

Нужно сделать так, чтобы во фреймах грузился тот же документ с фреймами.

Ну тоесть child-документ и parent-документ это один и тот же файл, только один во фрейме, а второй содержит этот фрейм.

Хорс
На сайте с 14.12.2010
Offline
21
#9
rommer:
Пример показать довольно проблематично.
Но могу сказать, что сделать с вашим примером, чтобы он "заглючил".
Нужно сделать так, чтобы во фреймах грузился тот же документ с фреймами.
Ну тоесть child-документ и parent-документ это один и тот же файл, только один во фрейме, а второй содержит этот фрейм.

Да, такую структуру, я бы вряд ли смог предположить 😂

Можно узнать цель данного скрипта?

Это проверка на глубину вложенности, или просто надо что-то поменять в самом верхнем паренте, независимо от вложенности?

Во всяком случае такая смешная конструкция в опере работать будет от одного до двенадцати уровней вложенности: 😂


parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.document.getElementById

и это не предел 🤪

Но скажу по секрету, есть способ лучше :)


top.document.getElementById
R
На сайте с 17.11.2011
Offline
22
#10
Хорс:
Да, такую структуру, я бы вряд ли смог предположить 😂
Можно узнать цель данного скрипта?
Это проверка на глубину вложенности, или просто надо что-то поменять в самом верхнем паренте, независимо от вложенности?
Во всяком случае такая смешная конструкция в опере работать будет от одного до двенадцати уровней вложенности: 😂

parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.parent.document.getElementById

и это не предел 🤪

Но скажу по секрету, есть способ лучше :)

top.document.getElementById

не все так глубоко. :)

Имеется в виду, что если в одном фрейме загружена страница, то во втором parent.document будет ображаться к первому фрейму, а не к документу-родителю.

А цель довольно проста. Есть ссылка. Надо, чтобы при клике не перегружалась страница, а только данные, а если открыть в новом окне, то чтобы все грузилось нормально.

Такой себе ajax домашней закваски.

Вот оно-то и глючит в этом месте.

rommer добавил 22.11.2011 в 01:20

Кстати, топ вроде бы не глючит.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий