Middle
Kā notiek datu apmaiņa starp iframe un galveno lapu?
sobes.tech AI
Atbilde no AI
Ir vairākas datu apmaiņas metodes:
-
PostMessage API:
- Galvenais un drošākais veids.
- Atļauj sūtīt ziņojumus starp logiem (iframe/vecāku, dažādiem logiem/cilnēm) no dažādām domēniem.
- Ir svarīgi norādīt sagaidāmo
origin, lai novērstu XSS uzbrukumus.
// Sūtīšana no vecāku loga uz iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Sveiki no vecāka!', 'https://trusted-domain.com'); // Saņemšana iframe window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Pārbauda sūtītāju } console.log('Saņemts ziņojums iframe:', event.data); }); // Sūtīšana no iframe uz vecāku logu window.parent.postMessage('Sveiki no iframe!', 'https://parent-domain.com'); // Saņemšana vecāku logā window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Pārbauda sūtītāju } console.log('Saņemts ziņojums vecākā:', event.data); }); -
Pieeja
windowobjektam (tikai Same-Origin):- Ja iframe un vecāku lapa atrodas tajā pašā domēnā (Same-Origin Policy), tie var tieši piekļūt viens otra
windowobjektiem.
// Vecāku logā const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Vērtība no vecāka'; iframeWindow.someFunction(); // Iframe const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Ja iframe un vecāku lapa atrodas tajā pašā domēnā (Same-Origin Policy), tie var tieši piekļūt viens otra
-
URL haš (
#):- Vienkāršs, bet ierobežots veids.
- Var nodot nelielus datus, mainot hašu iframe URL.
- Haša izmaiņas neuzlādē lapu.
- Prasa uzraudzīt haša izmaiņas (piemēram, ar
hashchangenotikumu).
// Vecāku logā, lai mainītu iframe hašu const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'dati=kāds_vērtība'; // Iframe, lai lasītu hašu window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hašs mainījās:', hash); // Datu parsēšana no haša }); -
Izmaiņas
location.href(mazāk ieteicams):- Datu nodošana, mainot iframe URL un to atkārtoti ielādējot.
- Nav piemērots biežai apmaiņai.
-
Koplietojamie glabātuvju (Same-Origin):
localStorageunsessionStorage.- Ja iframe un vecāks ir tajā pašā domēnā, tie var izmantot tās pašas glabātuvju.
// Vecāku logā localStorage.setItem('koplietotsDati', JSON.stringify({ vērtība: 'Piemērs' })); // Iframe const dati = JSON.parse(localStorage.getItem('koplietotsDati')); console.log('Dati no localStorage:', dati);
Izvēle ir atkarīga no drošības politikas (Same-Origin Policy) un pārsūtāmo datu apjoma/veida. PostMessage ir visflexiblākais un drošākais risinājums starp domēniem.