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ść.