Middle
Hoe vindt de gegevensuitwisseling plaats tussen iframe en de hoofdpagina?
sobes.tech AI
Antwoord van AI
Er zijn verschillende manieren om gegevens uit te wisselen:
-
PostMessage API:
- De belangrijkste en veilige manier.
- Hiermee kunnen berichten worden verzonden tussen vensters (iframe/oudervenster, verschillende vensters/tabs) van verschillende domeinen.
- Het is belangrijk om de verwachte
originop te geven om XSS-aanvallen te voorkomen.
// Verzenden vanuit het oudervenster naar iframe const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Hallo van de ouder!', 'https://trusted-domain.com'); // Ontvangen in iframe window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Controleer de verzender } console.log('Ontvangen bericht in iframe:', event.data); }); // Verzenden vanuit iframe naar ouder window.parent.postMessage('Hallo van iframe!', 'https://parent-domain.com'); // Ontvangen in ouder window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Controleer de verzender } console.log('Ontvangen bericht in ouder:', event.data); }); -
Toegang tot het
window-object (alleen voor Same-Origin):- Als iframe en hoofdpagina op hetzelfde domein staan (Same-Origin Policy), kunnen ze direct toegang krijgen tot elkaars
window-objecten.
// In het oudervenster const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Waarde van de ouder'; iframeWindow.someFunction(); // In iframe const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Als iframe en hoofdpagina op hetzelfde domein staan (Same-Origin Policy), kunnen ze direct toegang krijgen tot elkaars
-
URL-hash (
#):- Eenvoudige, maar beperkte methode.
- Kleine gegevens kunnen worden verzonden door de hash in de URL van iframe te wijzigen.
- Hash-wijzigingen laden de pagina niet opnieuw.
- Het is nodig om hash-wijzigingen te volgen (bijvoorbeeld via het
hashchange-evenement).
// In het oudervenster, om de hash van iframe te wijzigen const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'data=some_value'; // In iframe, om de hash te lezen window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hash is gewijzigd:', hash); // Gegevens parseren uit hash }); -
Wijzigen van
location.href(minder aanbevolen):- Gegevens verzenden door de URL van iframe te wijzigen en opnieuw te laden.
- Niet geschikt voor frequente uitwisseling.
-
Gedeelde opslag (Same-Origin):
localStorageensessionStorage.- Als iframe en hoofdpagina op hetzelfde domein staan, kunnen ze dezelfde opslag gebruiken.
// In het oudervenster localStorage.setItem('sharedData', JSON.stringify({ value: 'Voorbeeld' })); // In iframe const data = JSON.parse(localStorage.getItem('sharedData')); console.log('Gegevens uit localStorage:', data);
De keuze van methode hangt af van het beveiligingsbeleid (Same-Origin Policy) en het volume/type gegevens dat wordt uitgewisseld. PostMessage is de meest flexibele en veilige oplossing voor cross-domein uitwisseling.