2013-05-20 3 views
11

Как вы можете разделить два iFrames друг с другом? Например, я был значением элемента со второго iframe, а 1-й iframe имеет на нем элемент отображения. Мне нужно получить значение с 2-го кадра до 1-го. Как мне это сделать? Не говорите использование файлов cookie, потому что это повредит массивной суммой данных.Связь между iFrames?

+4

Прежде всего, являются плавающие фреймы на том же домене? Или они с разных сайтов? – BBog

+1

https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage – epascarello

+0

Это тот же домен. Итак, оба находятся на http://www.example.com – Matthew

ответ

17

Если элементы обслуживаются из одного домена, они могут напрямую обращаться друг к другу. Например, в iframe1 вы могли бы сделать:

document.getElementById('someDiv').innerHTML = 
    top.document.getElementById('otherIframe').contentWindow. 
    document.getElementById('someOtherDiv').innerHTML; 
+0

Использование top делает предположение, что этот код никогда не будет загружен в фрейм, иначе не будет указывать на то, что вы ожидаете от него. –

+0

@MattBerkowitz, что вы имеете в виду? если у вас есть два iframes на странице и вызывается 'top' из них, это дает вам окно, из которого вы можете найти другой iframe. – jbabey

+16

Нет, это дает вам самый верхний кадр, который может быть родителем или каким-то дедушкой и т. Д. Рассмотрим настройку, которую вы только что упоминали, все загруженные внутри другого iframe (мы не можем контролировать, кто может загружать нашу страницу в iframe), сверху будет верните эту самую внешнюю страницу, которая, вероятно, не будет иметь «otherIframe» для поиска (и может даже не удовлетворять требованиям CORS). Использование 'parent' вместо' top', вероятно, будет немного лучше, поскольку оно гарантирует, что вы делаете то, что думаете, что делаете. –

5

Я предупреждаю вас первый прочь, что вы будете нуждаться в полной способности кода модификации для обоих фреймов. Iframes обрабатываются строгой безопасностью; в противном случае я мог бы создать домен «bunkofamerica.com», поставить «bankofamerica.com» в iframe, а затем проанализировать пароль пользователя по мере его ввода. (Банки, как правило, имеют IFrame перебора кода в любом случае, но все же ...)

Вы ищете эту нативную функцию: https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

А вот библиотека GitHub моей компания использует, чтобы сделать это более кросс- совместимый с браузером: https://github.com/daepark/postmessage

jbabey правильный, если iframe находятся в одном домене и протоколе, то это проще.

Opera Docs объяснил это с лучшими соответствующими примерами https://dev.opera.com/articles/window-postmessage-messagechannel/#channel

0

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

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

window.Mgmt = { 
    frame1: $('iframe#frame1'), 
    frame2: $('iframe#frame2') 
} 

то ни в одном из фреймов, вы должны быть в состоянии получить доступ к этому объекту с помощью window.parent.Mgmt.frame1 и т.д.

Смежные вопросы