Как общаться между iframe и родительским сайтом?

123

Веб-сайт iframe не расположен в том же домене, но оба являются моими, и я хотел бы общаться между iframe и родительским сайтом. Возможно ли это?

Теги:
iframe

4 ответа

207
Лучший ответ

В разных доменах невозможно вызвать методы или напрямую получить доступ к документу содержимого iframe.

Вы должны использовать кросс-документацию.

Например, в верхнем окне:

 myIframe.contentWindow.postMessage('hello', '*');

и в iframe:

window.onmessage = function(e){
    if (e.data == 'hello') {
        alert('It works!');
    }
};
  • 2
    спасибо, но, к сожалению, это не работает в старых браузерах.
  • 3
    Правильно, это не работает в IE <= 7
Показать ещё 10 комментариев
14

Эта библиотека поддерживает HTML5 postMessage и устаревшие браузеры с изменением размера + хэш https://github.com/ternarylabs/porthole

Изменить: теперь в 2014 году использование IE6/7 довольно невелико, IE8 и, прежде всего, поддерживают postMessage, поэтому я предлагаю просто использовать это.

https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

  • 0
    С оговоркой, что IE8 / 9 поддерживает только строки caniuse.com/#search=postmessage (см. Известные проблемы)
  • 0
    это можно обойти, кодируя объекты событий в json и декодируя их на другой стороне.
3

Свойство window.top должно быть в состоянии дать то, что вам нужно.

например.

alert(top.location.href)

См http://cross-browser.com/talk/inter-frame_comm.html

  • 10
    Поскольку iframe не находится в том же домене, он не может получить доступ к его родителю.
-4

вы можете использовать почтовый API (почтовый js/postal xframe/postal fedration)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню