Kurs HTML

Lekcja 10.5: Osadzanie treści z innych witryn (<iframe>)

Strona główna > Rozdział 10: Multimedia > Osadzanie treści (<iframe>)

Wyświetlanie zewnętrznych treści na stronie

Czasami zamiast hostować multimedia samodzielnie, chcemy osadzić na naszej stronie treści pochodzące z innych witryn, takie jak filmy z YouTube, mapy Google, posty z mediów społecznościowych czy nawet całe inne strony internetowe. Do tego celu służy element <iframe> (Inline Frame).

<iframe> tworzy wbudowaną ramkę, która działa jak osobne okno przeglądarki wewnątrz naszej strony, pozwalając na załadowanie i wyświetlenie w niej dokumentu HTML z innego źródła (URL).

Podstawowe użycie <iframe>

Najważniejszym atrybutem jest src, który określa adres URL dokumentu do załadowania w ramce. Należy również zdefiniować wymiary ramki za pomocą width i height.

<!-- Osadzenie innej strony internetowej -->
<iframe src="https://www.wikipedia.org/" width="800" height="600">
  Twoja przeglądarka nie obsługuje ramek inline.
</iframe>

Tekst pomiędzy <iframe> a </iframe> jest wyświetlany tylko w bardzo starych przeglądarkach, które nie obsługują tego elementu.

Kluczowe atrybuty <iframe>

Osadzanie filmów z YouTube

YouTube i inne platformy wideo zazwyczaj udostępniają gotowy kod HTML do osadzenia filmu na stronie. Kod ten wykorzystuje właśnie <iframe>.

Aby uzyskać kod:

  1. Przejdź do strony filmu na YouTube.
  2. Kliknij przycisk "Udostępnij" pod filmem.
  3. Wybierz opcję "Umieść".
  4. Skopiuj wygenerowany kod <iframe>...</iframe> i wklej go na swoją stronę.

Przykład kodu osadzania z YouTube:

<iframe width="560" height="315" 
  src="https://www.youtube.com/embed/VIDEO_ID" 
  title="YouTube video player" 
  frameborder="0" 
  allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 
  referrerpolicy="strict-origin-when-cross-origin" 
  allowfullscreen>
</iframe>

(Zastąp VIDEO_ID rzeczywistym identyfikatorem filmu z YouTube).

Zwróć uwagę na użycie atrybutów allow i allowfullscreen, które są niezbędne do poprawnego działania odtwarzacza YouTube.

Osadzanie map Google

Podobnie jak YouTube, Mapy Google oferują łatwy sposób na osadzenie interaktywnej mapy na stronie za pomocą <iframe>.

  1. Otwórz Mapy Google i znajdź interesujące Cię miejsce lub wyznacz trasę.
  2. Kliknij ikonę menu (trzy poziome linie) lub przycisk "Udostępnij".
  3. Wybierz zakładkę "Umieszczanie mapy".
  4. Skopiuj wygenerowany kod <iframe>...</iframe>.

Przykład kodu osadzania z Google Maps:

<iframe 
  src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d..." 
  width="600" height="450" style="border:0;" 
  allowfullscreen="" loading="lazy" 
  referrerpolicy="no-referrer-when-downgrade">
</iframe>

(Adres URL w src będzie znacznie dłuższy i zawierał konkretne parametry mapy).

Zwróć uwagę na użycie loading="lazy", co jest dobrą praktyką dla map, które często nie są od razu widoczne na stronie.

Kwestie bezpieczeństwa: Sandboxing

Osadzanie treści z zewnętrznych źródeł za pomocą <iframe> niesie ze sobą ryzyko bezpieczeństwa. Złośliwa strona osadzona w ramce mogłaby potencjalnie próbować wykonać niechciane akcje (np. uruchomić skrypty, przekierować użytkownika, wyświetlić phishing). Atrybut sandbox pomaga zminimalizować to ryzyko poprzez nałożenie ograniczeń na osadzoną treść.

Użycie <iframe sandbox src="..."></iframe> (bez żadnych wartości) włącza najsilniejsze ograniczenia. Można selektywnie poluzować niektóre z nich, np.:

Należy używać sandbox i zezwalać tylko na te funkcje, które są absolutnie niezbędne do działania osadzonej treści.

Zadanie praktyczne (z rozwiązaniem)

Zadanie: Znajdź dowolny film na YouTube, skopiuj jego kod do osadzenia i wklej go na swoją stronę HTML. Upewnij się, że film wyświetla się poprawnie.

Rozwiązanie:

(Zakładamy, że znaleźliśmy film o ID `dQw4w9WgXcQ` - przykładowy popularny film)

<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <title>Osadzanie wideo z YouTube</title>
    <style>
        body { font-family: sans-serif; }
        .video-container {
            position: relative;
            padding-bottom: 56.25%; /* Proporcje 16:9 */
            height: 0;
            overflow: hidden;
            max-width: 800px; /* Opcjonalne ograniczenie szerokości */
            margin: 20px auto;
            border: 1px solid #ccc;
        }
        .video-container iframe {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>

<h1>Przykład osadzonego filmu z YouTube</h1>

<div class="video-container">
  <iframe width="560" height="315" 
    src="https://www.youtube.com/embed/dQw4w9WgXcQ" 
    title="YouTube video player" 
    frameborder="0" 
    allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" 
    referrerpolicy="strict-origin-when-cross-origin" 
    allowfullscreen>
  </iframe>
</div>

<p>Powyżej znajduje się film osadzony za pomocą elementu &lt;iframe&gt;. Użyto dodatkowego &lt;div&gt; i stylów CSS, aby zapewnić responsywność odtwarzacza (zachowanie proporcji 16:9 przy zmianie szerokości).</p>

</body>
</html>

Wskazówka: Użycie kontenera div ze stylami CSS (jak w przykładzie) jest popularną techniką tworzenia responsywnych ramek iframe, które zachowują swoje proporcje przy zmianie rozmiaru okna przeglądarki.

Dodatkowe zadania do samodzielnego wykonania:

  1. Osadź na stronie mapę Google pokazującą Twoją ulubioną lokalizację.
  2. Spróbuj osadzić stronę główną popularnego serwisu informacyjnego za pomocą <iframe>. Czy działa? Niektóre strony blokują możliwość osadzania ich w ramkach ze względów bezpieczeństwa (za pomocą nagłówka HTTP X-Frame-Options lub Content-Security-Policy).
  3. Dodaj atrybut sandbox (bez wartości) do ramki osadzającej YouTube. Czy film nadal działa? Jakie funkcje zostały zablokowane? Spróbuj dodać sandbox="allow-scripts allow-same-origin" - czy to coś zmienia?

Najczęściej zadawane pytania

Do czego służy znacznik <iframe>?

Do osadzania (wyświetlania) innego dokumentu HTML (pochodzącego z innej strony internetowej lub z tej samej) wewnątrz bieżącego dokumentu. Tworzy wbudowaną ramkę.

Jak osadzić film z YouTube lub mapę Google?

Najłatwiej skorzystać z opcji "Udostępnij" -> "Umieść" dostępnej na stronach YouTube i Google Maps. Skopiuj wygenerowany kod <iframe> i wklej go na swoją stronę.

Co to jest atrybut `sandbox` w <iframe>?

Jest to ważny atrybut bezpieczeństwa, który nakłada ograniczenia na treść osadzoną w ramce (np. blokuje skrypty, formularze), aby chronić stronę główną przed potencjalnie złośliwym kodem.

Co robi atrybut `allow` w <iframe>?

Kontroluje, do jakich funkcji przeglądarki (np. pełny ekran, geolokalizacja, mikrofon, kamera) ma dostęp treść osadzona w ramce. Jest to mechanizm zarządzania uprawnieniami.

Dlaczego niektóre strony nie chcą się załadować w <iframe>?

Wiele stron internetowych blokuje możliwość osadzania ich w ramkach na innych domenach ze względów bezpieczeństwa (ochrona przed clickjackingiem). Robią to za pomocą nagłówków HTTP, takich jak `X-Frame-Options: DENY` lub `Content-Security-Policy: frame-ancestors 'none'`.