Kod

Do tego samouczka będziemy potrzebować dwóch plików HTML: pliku rodzica, w którym umieścimy ramkę iframe, oraz pliku dziecka zawierającego zawartość ramki iframe.

child.html

Nasz plik dziecka będzie zawierał prosty generator tekstu, w którym ludzie będą mogli kliknąć przycisk, aby dodać kolejny akapit tekstu lorem ipsum.

Jako że ten tutorial dotyczy iframe, a nie funkcjonalności tego, co się w nim znajduje, nie krępuj się skopiować i wkleić poniższego do child.html:

Możesz wypróbować powyższy kod w tym CodePen:

parent.html

Możemy teraz wstawić naszą ramkę iframe do parent.html.

Dodajemy zwykły kod HTML5 boilerplate, a następnie wstawiamy następujące elementy pomiędzy znaczniki body:

<iframe src="child.html" style="width:100%;border:none;"></iframe>

Ale tutaj napotykamy nasz problem. Ponieważ ustawiliśmy overflow: hidden, przyciski i połowa pierwszego akapitu znikają.

A gdybyśmy nie ustawili overflow: hidden, zobaczylibyśmy dwa paski przewijania, jak na obrazku powyżej. Aby rozwiązać ten problem, musimy wysłać wiadomości post z child.html do okna nadrzędnego!

child.html

Więc, wracając do child.html, musimy dodać nowych słuchaczy zdarzeń do sekcji skryptu.

Musimy powiadomić element nadrzędny o wysokości ramki iframe:

  • przy każdym załadowaniu,
  • przy każdej zmianie rozmiaru okna oraz
  • przy każdym naciśnięciu przycisku.

Kiedy wystąpi każde z tych zdarzeń, wywołamy funkcję o nazwie sendPostMessage.

Następujący kod umieść tuż przed zamykającym znacznikiem <script>:

Teraz stwórzmy naszą funkcję sendPostMessage().

Chcemy zmierzyć wysokość elementu o identyfikatorze container. Jeśli (i tylko jeśli) wysokość się zmieni, chcemy wysłać wiadomość o nazwie frameHeight do okna nadrzędnego, powiadamiając je o aktualizacji.

Następujący kod powinien znaleźć się powyżej tego, co właśnie napisaliśmy:

Drugi argument metody postMessage reprezentuje pochodzenie docelowe: nazwę hosta okna nadrzędnego.

Jest to użyteczne dla bezpieczeństwa, aby upewnić się, że wiadomość jest wysyłana tylko do określonych domen, ale dla celów rozwojowych możemy ustawić docelowe pochodzenie na '*'. Oznacza to, że każde okno nadrzędne otrzyma wiadomość.

Ogółem, kod child.html powinien wyglądać następująco:

parent.html

Wczytajmy parent.html w przeglądarce i otwórzmy konsolę (naciśnij CTRL+Shift+ J w Google Chrome).

Kiedy zmienimy rozmiar okna, powinniśmy teraz zobaczyć wartości pojawiające się w konsoli. Ostatnim krokiem jest użycie ich do ustawienia wysokości ramki iframe za każdym razem, gdy jedna z tych wartości zostanie wysłana.

Musimy nasłuchiwać zdarzeń wiadomości i za każdym razem, gdy otrzymamy jedną z nich, powinniśmy użyć jej do ustawienia właściwości height ramki iframe (plus trochę paddingu):

W sumie, twój plik parent.html powinien wyglądać tak:

Jeśli wykonałeś kroki poprawnie, twoja ramka iframe będzie teraz zmieniać rozmiar automatycznie, tak jakby jej zawartość była częścią okna nadrzędnego!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.