Ну, у меня есть IFrame, который вызывает ту же страницу домена. Моя проблема в том, что я хочу получить доступ к некоторой информации из этого родительского Iframe с этой вызываемой страницы (из JavaScript). Как я могу получить доступ к этому Iframe?
Детали: Есть несколько таких же фреймов, которые могут загружать одну и ту же страницу, потому что я программирую среду Windows. Я намерен закрыть этот Ифраме, поэтому мне нужно знать, что мне следует закрыть из него. У меня есть массив, хранящий ссылки на эти Iframes.
РЕДАКТИРОВАТЬ: Там iframes генерируются динамически
javascript
iframe
Хосе Лил
источник
источник
Ответы:
Также вы можете установить имя и идентификатор на равные значения
так что вы сможете использовать следующий код на дочерней странице
источник
iframe
слишком маленького размера. Но почему это работает?window.name
возвращает строку Чем отличается использованиеwindow.name
от передачи имени id в виде строки, которая не работает?)?Просто позвоните
window.frameElement
со страницы в рамке. Если страница не в рамке, тоframeElement
будетnull
.Другой способ (получить элемент window внутри фрейма менее тривиально), но для полноты:
источник
window.frameElement
Возвращается,null
когда window и iframe имеют разные домены, то есть обмен сообщениями между источниками.Я бы порекомендовал использовать API postMessage .
В своем фрейме звоните:
На странице вы включаете iframe, вы можете прослушивать такие события:
Кстати, также можно делать звонки в другие окна, а не только в фреймы.
Узнайте больше об API postMessage в блоге Джона Резигса здесь
источник
<iframe>
содержание не должно ничего знать о родителе и наоборот. Они только должны подчиняться простому контракту сообщения. Потрясающие!'*'
.'*'
на клиентах. Любые другие решения выдают ошибку в браузере Chrome, считая файлы в папке клиентов не принадлежащими к тому же источнику, поскольку сервер не настроен. Это лучшее и единственное решение: dyn-web.com/tutorials/iframes/postmessageСтарый вопрос, но у меня была такая же проблема, и я нашел способ получить iframe. Это просто вопрос перебора массива frames [] родительского окна и проверки содержимого окна каждого фрейма относительно окна, в котором выполняется ваш код. Пример:
Или, используя jQuery:
Этот метод сохраняет назначение идентификатора для каждого iframe, что хорошо в вашем случае, поскольку они создаются динамически. Я не смог найти более прямой путь, так как вы не можете получить элемент iframe с помощью window.parent - он идет прямо к родительскому элементу окна (пропуская iframe). Так что циклический просмотр их кажется единственным способом, если только вы не хотите использовать идентификаторы.
источник
Вы можете использовать
parent
для доступа к родительской странице. Таким образом, для доступа к функции это будет:источник
Как только идентификатор iframe установлен, вы можете получить доступ к iframe из внутреннего документа, как показано ниже.
Хорошо работает в IE, Chrome и FF.
источник
var iframe = frameElement
Может быть, просто использовать
в ваш фрейм, чтобы получить вызывающий фрейм / окна. Если у вас было несколько кадров вызова, вы можете использовать
источник
Попробуйте это, в родительском фрейме установите ваши IFRAME как это:
Обратите внимание, что идентификатор каждого кадра передается как привязка в src.
затем в вашем внутреннем html вы можете получить доступ к идентификатору кадра, в который он загружен, через location.hash:
Затем вы можете получить доступ к parent.document.getElementById () для доступа к тегу iframe изнутри iframe.
источник
источник