Cóż, mam ramkę iFrame, która wywołuje tę samą stronę domeny. Mój problem polega na tym, że chcę uzyskać dostęp do niektórych informacji z tego nadrzędnego elementu iframe z tej wywoływanej strony (z JavaScript). Jak mogę uzyskać dostęp do tego elementu iframe?
Szczegóły: Istnieje kilka ramek iframe takich jak ta, które mogą mieć załadowaną tę samą stronę, ponieważ programuję środowisko Windows. Zamierzam zamknąć ten iframe, dlatego muszę wiedzieć, który powinienem zamknąć od wewnątrz. Mam tablicę zawierającą odniesienia do tych ramek iframe.
EDYCJA: Tam iframe są generowane dynamicznie
javascript
iframe
José Leal
źródło
źródło
Odpowiedzi:
Możesz także ustawić nazwę i identyfikator na równe wartości
więc będziesz mógł użyć kolejnego kodu wewnątrz strony podrzędnej
źródło
iframe
zbyt małego. Ale dlaczego to działa?window.name
zwraca ciąg. Czym różni się używaniewindow.name
od zwykłego przekazywania nazwy identyfikatora jako łańcucha, który nie działa)?Po prostu zadzwoń
window.frameElement
ze swojej strony w ramce. Jeśli strona nie jest w ramce,frameElement
będzienull
.W drugą stronę (umieszczenie elementu okna wewnątrz ramy jest mniej trywialne), ale ze względu na kompletność:
źródło
window.frameElement
zwraca,null
gdy okno i element iframe mają różne domeny, tj. przesyłanie wiadomości między źródłami.Polecam korzystanie z postMessage API .
W swoim iframe zadzwoń:
Na stronie, którą dołączasz element iframe, możesz nasłuchiwać takich zdarzeń:
Nawiasem mówiąc, możliwe jest również wywoływanie innych okien, a nie tylko ramek iframe.
Przeczytaj więcej o API postMessage na blogu Johna Resigs'a tutaj
źródło
<iframe>
treść nie musi nic wiedzieć o rodzicu i odwrotnie. Muszą tylko przestrzegać prostej umowy dotyczącej wiadomości. Niesamowite!'*'
.'*'
na klientach. Każde inne rozwiązanie powoduje błąd w przeglądarce Chrome, która traktuje pliki w folderze klientów jako inne niż to samo źródło, ponieważ serwer nie jest skonfigurowany. To najlepsze i jedyne rozwiązanie: dyn-web.com/tutorials/iframes/postmessageStare pytanie, ale miałem ten sam problem i znalazłem sposób na uzyskanie ramki iframe. Jest to po prostu kwestia iteracji przez tablicę frames [] okna nadrzędnego i przetestowania contentWindow każdej ramki z oknem, w którym działa twój kod. Przykład:
Lub używając jQuery:
Ta metoda oszczędza przypisywanie identyfikatora do każdego elementu iframe, co jest dobre w twoim przypadku, ponieważ są tworzone dynamicznie. Nie mogłem znaleźć bardziej bezpośredniego sposobu, ponieważ nie możesz pobrać elementu iframe za pomocą window.parent - przechodzi bezpośrednio do nadrzędnego elementu okna (pomijając iframe). Dlatego ich przeglądanie wydaje się jedynym sposobem, chyba że chcesz użyć identyfikatorów.
źródło
możesz użyć,
parent
aby uzyskać dostęp do strony nadrzędnej. Aby uzyskać dostęp do funkcji, byłoby to:źródło
Po ustawieniu id elementu iframe możesz uzyskać dostęp do elementu iframe z dokumentu wewnętrznego, jak pokazano poniżej.
Działa dobrze w IE, Chrome i FF.
źródło
var iframe = frameElement
Może po prostu użyj
do elementu iframe, aby uzyskać wywołującą ramkę / okna. Jeśli masz wiele ramek wywołujących, możesz użyć
źródło
Spróbuj tego, w swojej ramce nadrzędnej skonfiguruj swoje IFRAME'y w ten sposób:
Zauważ, że identyfikator każdej ramki jest przekazywany jako kotwica w src.
następnie w swoim wewnętrznym html możesz uzyskać dostęp do identyfikatora ramki, w której jest ładowana, poprzez location.hash:
wtedy możesz uzyskać dostęp do parent.document.getElementById (), aby uzyskać dostęp do tagu iframe z wnętrza elementu iframe
źródło
źródło