Mam kod do osadzenia, który użytkownicy mogą umieścić na swoich stronach. Tworzy on dwa elementy podrzędne dla dzieci na stronie. Chciałbym, żeby te dzieci mogły się komunikować.Komunikacja między dwoma dziećmi iframe za pomocą postMessage
Używam Javascript w window.postMessage
https://developer.mozilla.org/en-US/docs/DOM/window.postMessage
Ponieważ dwoje dzieci iframe nie mogą komunikować się bezpośrednio, używam rodzica jako przekaźnika wiadomości. Jednak rodzic może znajdować się w innej domenie, ponieważ jest to kod umożliwiający osadzanie.
Kiedy wszystkie trzy (rodzice i dwoje dzieci) są w tej samej domenie, to całkiem proste i mam tę pracę z kontroli bezpieczeństwa sprawdzenie e.origin
jest moja własna strona
# coffeescript
# host = "http://www.mysite.com"
host = "http://localhost"
receive_message = (e) ->
console.log("received message from " + e.origin + ": " + e.data)
return if e.origin != host
if e.data == "show"
...
else if e.data == "hide"
...
window.addEventListener("message", receive_message, false)
Co to elegancki sposób sprawdzić pochodzenie, gdy rodzic może być w dowolnej domenie?
Jaki jest dobry sposób na umożliwienie debugowania skryptu, w którym źródłem może być localhost?
Czy wystarczy sprawdzić parametr danych, jeśli przekazywane są nieniszczące/zmieniające się komunikaty?
Dzięki!
Wow - masz rację! Nie mogę uwierzyć, że tęskniłem za tym, nie miałem pojęcia, że dziecko może komunikować się z iframe. Świetnie się spisałam, dzięki za pomoc! –
Np, w dowolnym momencie. :) –
@IvanZuzak, (iframe1, okno nadrzędne i iframe2) znajdują się w różnych domenach. W jaki sposób mogę zagwarantować, że element iframe2 zostanie załadowany, gdy użyję parent.frames [1] .postMessage() w kodzie iframe1. Bo jeśli iframe2 nie jest załadowany , wywołanie postMessage() spowoduje błąd – wengeezhang