Связь между iFrames?

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

Ответ 1

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

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

Ответ 2

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

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

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

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

Операционные документы объяснили это наиболее подходящими примерами https://dev.opera.com/articles/window-postmessage-messagechannel/#channel

Ответ 3

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

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

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

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