jak z jednego <frame> załadować stronę do drugiego <frame>, HTML
name
(np. contentFrame
). target="contentFrame"
. Kluczowe punkty
• name
w <frame>
lub <iframe>
identyfikuje ramkę docelową.
• target
w <a>
/<form>
albo parent.frames['contentFrame'].location.href = 'nowa.html'
(JS) wykonuje przeładowanie.
• frameset/frame
są przestarzałe; w nowych projektach używaj iframe
, SPA, routerów JS.
<frameset cols="30%,70%">
<frame src="menu.html" name="menuFrame">
<frame src="start.html" name="contentFrame">
</frameset>
<a href="strona1.html" target="contentFrame">Strona 1</a>
• target
musi dokładnie odpowiadać name
drugiej ramki.
<button onclick="parent.frames['contentFrame'].location.href='strona2.html'">
Załaduj Strona 2
</button>
<iframe>
(HTML5 – zalecany) <iframe name="contentFrame" id="contentFrame" src="start.html"></iframe>
<!-- w menu -->
<a href="strona1.html" target="contentFrame">Strona 1</a>
<!-- lub JS -->
document.getElementById("contentFrame").src = "strona2.html";
Teoretyczne podstawy
• Każda ramka/iframe tworzy osobny „browsing context”.
• Atrybuty _self
, _blank
, _parent
, _top
są predefiniowanymi kontekstami.
• DOM pozwala odwołać się do ramek poprzez window.frames
lub identyfikator elementu.
Praktyczne zastosowania
• Konserwacja starszych interfejsów urządzeń embedded.
• Prototypowanie paneli administracyjnych w sieciach intranetowych, gdzie przestarzała technologia jest jeszcze wspierana.
Najnowsze dane (2024):
• frameset
oraz frame
zostały usunięte z HTML5; większość narzędzi lint/CI generuje ostrzeżenia.
• Popularne zamienniki: iframe
z atrybutami sandbox
, loading="lazy"
albo aplikacje SPA (React Router, Vue Router, Angular Router).
• Przeglądarki wzmacniają polityki bezpieczeństwa (nagłówki X-Frame-Options
, Content-Security-Policy: frame-ancestors
) – wpływa to na możliwość osadzania obcych domen.
• SEO i accessibility: wyszukiwarki oraz czytniki ekranu indeksują iframe, natomiast stary frameset gubi kontekst strony.
• Obsługa przycisku „Wstecz”: w frameset cofany jest tylko kontekst ramki, nie całej strony.
• Same-Origin Policy: JS może manipulować tylko ramkami z tej samej domeny, protokołu i portu.
• Clickjacking – osadzanie cudzych stron w ramkach bez zgody właściciela; przeciwdziałają temu X-Frame-Options
i CSP frame-ancestors
.
• RODO/CPRA – w iframe mogą ładować się ciasteczka stron trzecich; konieczna jest zgoda użytkownika na tracking.
• Dostępność WCAG 2.2: wymóg zapewnienia alternatyw (ARIA title
, czytelna nawigacja klawiaturą).
• Jeśli utrzymujesz stary kod: trzymaj deklarację DOCTYPE HTML 4.01 Frameset
, inaczej przeglądarka wejdzie w tryb Quirks.
• Dodaj <noframes>
z linkami HTML dla starszych technologii wspomagających.
• Przy migracji do iframe
pamiętaj o responsywnym stylowaniu (CSS aspect-ratio
, width:100%
).
• Do dynamicznego przeładowania treści bez odświeżania całej strony rozważ Fetch API + innerHTML
lub framework SPA.
Potencjalne wyzwania i jak je pokonać
• Brak nagłówka X-Frame-Options
w cudzej domenie → użyj reverse proxy lub poproś właściciela o dopuszczenie.
• Przeglądarka blokuje mixed-content (HTTP w HTTPS) – wymuś HTTPS na wszystkich zasobach.
• Frameset nie działa w AMP, większości mobilnych trybów czytników i w części web-view IoT.
• W kontekście PWA konieczna jest pełna kontrola nad routingiem; frameset koliduje z Service Workerem.
• Alternatywy: Web Components (<iframe>
w Shadow DOM), Micro-Frontend (Module Federation), server-side includes.
• Przeniesienie starego interfejsu frameset do SPA z zachowaniem linków – analiza routerów JS.
• Wpływ CSP sandbox
na integrację z zewnętrznymi widgetami.
• Testy penetracyjne pod kątem clickjacking i frame-busting.
Zasoby:
– MDN: „Deprecated \<frameset> element”.
– WHATWG HTML Living Standard – rozdział „Browsing contexts and Navigables”.
– Google Web Fundamentals: „Lazy-loading iframes”.
Aby z jednej ramki załadować stronę do drugiej:
name
. target="nazwa_ramki"
lub JavaScript parent.frames['nazwa'].location.href = 'plik.html'
.frameset/frame
ramką iframe
lub nowoczesnym routingiem SPA, dbając o bezpieczeństwo (X-Frame-Options
, CSP) i dostępność.