Доступ к элементу вне iframe - PullRequest
22 голосов
/ 09 апреля 2011

У меня есть файл: 1.html и iframe внутри него.
Я хочу получить доступ к элементу (скажем, myelement), который существует в 1.html (вне iframe) из iframe .
Как я могу это сделать?
Я попробовал:

top.getElementById("myelement")
top.document.getElementById("myelement")  
parent.getElementById("myelement")
parent.document.getElementById("myelement")

но это не сработало !!

Ответы [ 3 ]

38 голосов
/ 09 апреля 2011

Связь между iframe и родительским документом невозможна для ресурсов из разных источников. Он будет работать только в том случае, если iframe и содержащая его страница принадлежат одному хосту, порту и протоколу - например, http://example.com:80/1.html и http://example.com:80/2.html

Для ресурсов из разных источников вы можете использовать window.postMessage для связи между ними, но это полезно только в том случае, если браузер поддерживает этот метод и если вы контролируете оба ресурса.

Редактировать - при условии, что оба ресурса принадлежат одному источнику

В iframe window.parent ссылается на глобальный объект родительского документа, а не на сам объект документа. Я считаю, что вам нужно будет использовать parent.document.getElementById

15 голосов
/ 09 апреля 2011

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

Демонстрация здесь , источник внешнего кадра здесь , источник iframe здесь .

0 голосов
/ 15 марта 2012

Связь между iframe и родительским документом невозможна для ресурсов из разных источников

во многих отношениях это неправильно, я даже не хочу знать, с чего начать. Конечно, междоменные запросы и обмен алгоритмами имеют долгую историю, и они хорошо документированы и работают сейчас, можно запустить JSON-запрос или даже простые XMLHttp-запросы через JQuery, например, вы даже можете загрузить целые .js- файлы И внедрить их в ваш код - для внедрения кода в удаленные источники, конечно, потребуется соответствующий интерфейс; Можно достичь этого через общение с ответственными лицами, просто спросите их, и, может быть, они будут сотрудничать, если ваш проект имеет смысл и его использование.

Чтобы ответить на вопрос: доступ к целым документам повысил бы необходимость их передачи заранее - я бы порекомендовал XML для этой цели, поскольку дерево DOM и XML практически взаимозаменяемы. Загрузите дерево через .get ( .ajax для удаленных хостов), добавьте его к этому и получите к нему доступ так, как вам хочется. ... звучит легко, и если у вас есть опыт, это легко. Если вы когда-нибудь снова прочтете «междоменный» и «невозможно» в одном и том же предложении, вы можете с таким же успехом проигнорировать плакат - есть много людей, которые не знают, о чем говорят; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...