Определить текущий / собственный iframe - PullRequest
2 голосов
/ 14 января 2011

Каков наилучший способ определения элемента iframe DOM, в котором отображается страница?

Мне нужно уведомить родительское окно, когда содержимое iframe имеет действительно законченную загрузку(iframe onload выглядит как мошенничество с WebKit).

Рассмотрим следующий сценарий:

  • Родительское окно загружает новый iframe
  • Загруженный iframe вызываетФункция из родительского окна и отправляет ссылку на свой элемент DOM iframe (своего рода параметр «отправитель»).
  • Вызываемая родительская функция уничтожает iframe.

Предложения поальтернативные решения для этой межкадровой связи также приветствуются.

Одна проблема, с которой я столкнулся, заключалась в том, что браузеры Safari / Chrome / WebKit явно запускают событие iframe onload слишком рано - я попытался отправить данные формы (с загрузкой файла) в iframe и обработчик onload очистил значение элемента <input type="file" /> и уничтожил iframe, в результате чего отправка формы была aborted , поэтому я не могу использовать onload в этом случае (кстати, это функция или ошибка?).

Другой вариант использования - это когда iframe что-то делает и хочет взаимодействовать с родителем.

Ответы [ 4 ]

2 голосов
/ 14 января 2011

С window.parent вы можете получить родительское окно.Вы также можете вызвать методы для этого.Таким образом, с помощью следующего кода вы можете уведомить родительский элемент iframe о том, что вы закончили загрузку (вам нужно иметь функцию notifyLoaded в родительском окне.

window.parent.notifyLoaded(window);

Поскольку мы дали наше собственное окно, родительский цикл может зациклить все известныеiframes и проверьте, какой из них загружен (используя iframe.contentWindow , чтобы получить окно определенного iframe)

1 голос
/ 18 января 2011

Как Stefaan id говорят window.parent, но вы должны также проверить window.frameElement .

1 голос
/ 14 января 2011

Вы можете пройти все элементы iframe внутри родительского документа и сравнить свойство contentWindow элементов iframe с объектом окна внутри iframe (должно быть равным, но я еще не проверял его)

PS: сейчас проверено, отлично работает http://www.jsfiddle.net/doktormolle/CMdLZ/

1 голос
/ 14 января 2011

Существует несколько способов связи между фреймом и его родителем.

Самое простое, если оба имеют одинаковый набор document.domain, и в этом случае они могут общаться напрямую.

если нет, есть несколько разных способов осуществления междоменной связи, например, путем установки / чтения хэш-компонента URL-адреса iframe

Смотрите здесь для получения дополнительной информации

...