Middle
Ako prebieha výmena údajov medzi iframe a hlavnou stránkou?
sobes.tech AI
Odpoveď od AI
Existuje niekoľko spôsobov výmeny údajov:
-
PostMessage API:
- Hlavný a bezpečný spôsob.
- Umožňuje odosielanie správ medzi oknami (iframe/rodič, rôzne domény).
- Je dôležité uviesť očakávaný
originna prevenciu XSS útokov.
// Odoslanie z rodičovského okna do iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Ahoj od rodiča!', 'https://trusted-domain.com'); // Príjem v iframe window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Kontrola odosielateľa } console.log('Prijatá správa v iframe:', event.data); }); // Odoslanie z iframe do rodičovského okna window.parent.postMessage('Ahoj z iframe!', 'https://parent-domain.com'); // Príjem v rodičovskom okne window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Kontrola odosielateľa } console.log('Prijatá správa v rodičovi:', event.data); }); -
Prístup k objektu
window(len pre Same-Origin):- Ak sú iframe a rodičovská stránka na rovnakom doméne (Same-Origin Policy), môžu priamo získať prístup k objektom
windownavzájom.
// V rodičovskom okne const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Hodnota od rodiča'; iframeWindow.someFunction(); // V iframe const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Ak sú iframe a rodičovská stránka na rovnakom doméne (Same-Origin Policy), môžu priamo získať prístup k objektom
-
URL hash (
#):- Jednoduchý, ale obmedzený spôsob.
- Môže prenášať malé množstvo dát zmenou hashu v URL iframe.
- Zmeny hashu neobnovujú stránku.
- Vyžaduje sledovanie zmeny hashu (napríklad cez udalosť
hashchange).
// V rodičovskom okne, na zmenu hashu iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'data=nejaka_hodnota'; // V iframe, na čítanie hashu window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hash sa zmenil:', hash); // Parsovanie dát z hashu }); -
Zmena
location.href(menej odporúčané):- Prenos dát zmenou URL iframe a jeho následným načítaním.
- Nie je vhodné pre častú výmenu dát.
-
Zdieľané úložiská (Same-Origin):
localStorageasessionStorage.- Ak sú iframe a rodič na rovnakom doméne, môžu používať rovnaké úložiská.
// V rodičovskom okne localStorage.setItem('sharedData', JSON.stringify({ value: 'Príklad' })); // V iframe const data = JSON.parse(localStorage.getItem('sharedData')); console.log('Dáta z localStorage:', data);
Výber metódy závisí od bezpečnostnej politiky (Same-Origin Policy) a objemu/tipu prenášaných dát. PostMessage je najviac flexibilné a bezpečné riešenie pre cross-domain výmenu.