Middle
Kako se vrši razmena podataka između iframe i glavne stranice?
sobes.tech АИ
Одговор од АИ
Postoji nekoliko načina za razmenu podataka:
-
PostMessage API:
- Glavni i siguran način.
- Omogućava slanje poruka između prozora (iframe/roditelj, različite domene).
- Važno je navesti očekivani
originza sprečavanje XSS napada.
// Slanje iz roditeljskog prozora u iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Zdravo od roditelja!', 'https://trusted-domain.com'); // Prijem u iframe window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Provera pošiljaoca } console.log('Primljena poruka u iframe:', event.data); }); // Slanje iz iframe u roditeljski prozor window.parent.postMessage('Zdravo iz iframe!', 'https://parent-domain.com'); // Prijem u roditeljskom prozoru window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Provera pošiljaoca } console.log('Primljena poruka u roditelju:', event.data); }); -
Pristup objektu
window(samo za Same-Origin):- Ako su iframe i roditeljska stranica na istoj domeni (Same-Origin Policy), mogu direktno pristupiti
windowobjektima jedan drugom.
// U roditeljskom prozoru const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Vrednost od roditelja'; iframeWindow.someFunction(); // U iframe const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Ako su iframe i roditeljska stranica na istoj domeni (Same-Origin Policy), mogu direktno pristupiti
-
URL hash (
#):- Jednostavan, ali ograničen način.
- Može prenositi male količine podataka promenom hasha u URL iframe.
- Promene hasha ne osvežavaju stranicu.
- Zahteva praćenje promene hasha (npr. putem događaja
hashchange).
// U roditeljskom prozoru, za promenu hasha iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'data=neka_vrednost'; // U iframe window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hash se promenio:', hash); // Parsiranje podataka iz hasha }); -
Promena
location.href(manje preporučljivo):- Prenos podataka promenom URL iframe i njegovim ponovnim učitavanjem.
- Nije pogodno za čestu razmenu.
-
Deljena skladišta (Same-Origin):
localStorageisessionStorage.- Ako su iframe i roditelj na istoj domeni, mogu koristiti ista skladišta.
// U roditeljskom prozoru localStorage.setItem('sharedData', JSON.stringify({ value: 'Primer' })); // U iframe const data = JSON.parse(localStorage.getItem('sharedData')); console.log('Podaci iz localStorage:', data);
Izbor metode zavisi od sigurnosne politike (Same-Origin Policy) i obima/tipa prenesenih podataka. PostMessage je najfleksibilnije i najsigurnije rešenje za razmenu podataka između domena.