Kiedy w JavaScript używać window.opener
/ window.parent
/ window.top
?
Odpowiedzi:
window.opener
odnosi się do okna, które wywołało window.open( ... )
otwarcie okna, z którego zostało wywołanewindow.parent
odnosi się do rodzica okna w <frame>
lub<iframe>
window.top
odnosi się do okna znajdującego się najwyżej w oknie zagnieżdżonym w jednej lub kilku warstwach <iframe>
okien podrzędnychBędą null
(a może undefined
) wtedy, gdy nie będą miały związku z sytuacją w oknie odsyłającym. („Okno odwołujące się” oznacza okno, w którym jest uruchamiany kod JavaScript.)
window.open()
po przesłaniu strony. Teraz to okno potomne otwiera kolejne okno podrzędne z tym samym window.open()
zamykającym się ja. Teraz, kiedy zgłaszam moje drugie dziecko (pierwszego dziecka już nie ma), chciałbym uzyskać dostęp do elementów mojej strony głównej. Czy jest to możliwe od drugiego dziecka, gdy pierwszego już nie ma?
window.opener.opener
zanim strona pośrednia zniknie.
Myślę, że musisz dodać kontekst do swojego pytania. Jednak podstawowe informacje o tych rzeczach można znaleźć tutaj:
window.opener
https://developer.mozilla.org/en-US/docs/Web/API/Window.opener
Użyłem window.opener głównie podczas otwierania nowego okna, które działało jak okno dialogowe, które wymagało wprowadzenia danych przez użytkownika i musiało przekazać informacje z powrotem do okna głównego. Jest to jednak ograniczone przez zasady pochodzenia, więc musisz upewnić się, że zarówno zawartość okna dialogowego, jak i okna otwierającego są ładowane z tego samego źródła.
window.parent
https://developer.mozilla.org/en-US/docs/Web/API/Window.parent
Używałem tego głównie podczas pracy z ramkami iFrame, które muszą komunikować się z obiektem okna, który je zawiera.
window.top
https://developer.mozilla.org/en-US/docs/Web/API/Window.top
Jest to przydatne, aby zapewnić interakcję z oknem przeglądarki najwyższego poziomu. Możesz go użyć między innymi do zapobiegania ramkowaniu Twojej witryny przez inną witrynę.
Jeśli dodasz więcej szczegółów do swojego pytania, mogę podać inne, bardziej odpowiednie przykłady.
AKTUALIZACJA:
Istnieje kilka sposobów radzenia sobie z sytuacją.
Masz następującą strukturę:
Gdy okno dialogowe 1 uruchamia kod otwierający okno dialogowe 2, po utworzeniu okna dialogowego 2 należy ustawić w oknie dialogowym 1 właściwość, która odwołuje się do otwieracza Dialog1.
Więc jeśli „childwindow” jest zmienną dla obiektu okna dialog 2, a „window” jest zmienną dla obiektu okna Dialog 1. Po otwarciu okna dialogowego 2, ale przed zamknięciem okna 1, wykonaj przypisanie podobne do tego:
childwindow.appMainWindow = window.opener
Po wykonaniu powyższego przypisania zamknij okno dialogowe 1. Następnie z kodu działającego wewnątrz okna dialog2 powinieneś móc użyć
window.appMainWindow
odniesienia do głównego okna, obiektu okna.
Mam nadzieję że to pomoże.
window.open()
po przesłaniu strony. Teraz to okno potomne otwiera kolejne okno podrzędne z tym samym window.open()
zamykającym się ja. Teraz, kiedy zgłaszam moje drugie dziecko (pierwszego dziecka już nie ma), chciałbym uzyskać dostęp do elementów mojej strony głównej. Czy jest to możliwe od drugiego dziecka, gdy pierwszego już nie ma?
top, parent, opener (a także window, self i iframe) to wszystkie obiekty okna.
window.opener
-> zwraca okno, które otwiera lub uruchamia bieżące okno podręczne.window.top
-> zwraca najwyższe okno, jeśli używasz ramek, jest to okno zestawu ramek, jeśli nie używasz ramek, jest to to samo, co okno lub self.window.parent
-> zwraca ramkę nadrzędną bieżącej ramki lub ramki iframe. Ramką nadrzędną może być okno zestawu ramek lub inna ramka, jeśli masz ramki zagnieżdżone. Jeśli nie używasz ramek, rodzic jest tym samym, co bieżące okno lub własnegdy masz do czynienia z wyskakującymi okienkami window.opener odgrywa ważną rolę, ponieważ mamy do czynienia z polami strony nadrzędnej i podrzędnej, gdy musimy użyć wartości na stronie nadrzędnej, możemy użyć window.opener lub potrzebujemy danych w oknie potomnym lub wyskakującym okienku w momencie ładowania możemy ponownie ustawić wartości za pomocą window.opener