Strona internetowa w ramce iframe nie znajduje się w tej samej domenie , ale obie są moje i chciałbym się komunikować między iframe
witryną nadrzędną a nią. Czy to możliwe?
javascript
html
ajax
iframe
Danny Fox
źródło
źródło
window.onmesage = function()...
. Wwindow.top.postMessage('hello', '*')
file://C:/Windows/system32/whatever
na stronie internetowej i skierować go bezpośrednio do folderu systemowego użytkownika. Obecnie przeglądarki najczęściej ignorują kliknięcia takich linków. Uruchom serwer WWW i uzyskaj dostęp do swojego kodu, a zobaczysz, że błędy znikają.window.frames[index]
aby uzyskać child frame (<iframe>, <object>, <frame>
), równoważne zgetElementsByTagName("iframe")[index].contentWindow
. Aby uzyskać obiekt okna nadrzędnego z ramek IFrame, lepiej jest użyćwindow.parent
, ponieważwindow.top
reprezentuje najwyższe okno nadrzędneMusi tu być, ponieważ zaakceptowano odpowiedź z 2012 roku
W 2018 roku i we współczesnych przeglądarkach możesz wysłać niestandardowe zdarzenie z iframe do okna nadrzędnego.
iframe:
rodzic:
PS: Oczywiście możesz wysyłać zdarzenia w przeciwnym kierunku w ten sam sposób.
źródło
dispatchEvent
jest obsługiwany we wszystkich głównych przeglądarkach. IE9 była pierwszą wersją, w której się pojawiła, więc większość systemów operacyjnych teraz z nią współpracuje. caniuse.com/#search=dispatchEventTa biblioteka obsługuje HTML5 postMessage i starsze przeglądarki z funkcją resize + hash https://github.com/ternarylabs/porthole
Edycja: Teraz w 2014 r. Zużycie IE6 / 7 jest dość niskie, IE8 i przede wszystkim obsługa,
postMessage
więc teraz sugeruję, aby po prostu z niego korzystać.https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
źródło
window.top
nieruchomość powinna być w stanie dać to, czego potrzebujesz.Na przykład
Zobacz http://cross-browser.com/talk/inter-frame_comm.html
źródło
Możesz także użyć
postMessage(message, '*')
;źródło
Użyj,
event.source.window.postMessage
aby odesłać z powrotem do nadawcy.Z iframe
Następnie od rodzica odpowiedz.
źródło