Middle
iframe ile ana sayfa arasında veri alışverişi nasıl gerçekleşir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Veri alışverişi için birkaç yöntem vardır:
-
PostMessage API:
- Ana ve güvenli yöntem.
- Farklı alan adlarından pencereler (iframe/ana pencere, farklı pencereler/sekmeler) arasında mesaj göndermeye olanak tanır.
- XSS saldırılarını önlemek için beklenen
originbelirtmek önemlidir.
// Ana pencereden iframe'e gönderme const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.postMessage('Merhaba ana pencereden!', 'https://trusted-domain.com'); // iframe'de alma window.addEventListener('message', function(event) { if (event.origin !== 'https://parent-domain.com') { return; // Göndereni kontrol et } console.log('Iframe içinde alınan mesaj:', event.data); }); // iframe'den ana pencereye gönderme window.parent.postMessage('Merhaba iframe!', 'https://parent-domain.com'); // ana pencerede alma window.addEventListener('message', function(event) { if (event.origin !== 'https://iframe-domain.com') { return; // Göndereni kontrol et } console.log('Ana pencerede alınan mesaj:', event.data); }); -
windownesnesine erişim (Sadece Same-Origin için):- Eğer iframe ve ana sayfa aynı alan adında ise (Same-Origin Policy), doğrudan
windownesnelerine erişebilirler.
// Ana pencerede const iframeEl = document.getElementById('my-iframe'); const iframeWindow = iframeEl.contentWindow; iframeWindow.someVariable = 'Ana pencereden değer'; iframeWindow.someFunction(); // iframe'de const parentWindow = window.parent; console.log(parentWindow.someVariable); parentWindow.someOtherFunction(); - Eğer iframe ve ana sayfa aynı alan adında ise (Same-Origin Policy), doğrudan
-
URL hash (
#):- Basit ama sınırlı yöntem.
- URL'deki hash'i değiştirerek küçük veriler iletebilir.
- Hash değişiklikleri sayfayı yeniden yüklemez.
- Hash değişikliklerini izlemek gerekir (örneğin,
hashchangeolayıyla).
// Ana pencerede iframe'in hash'ini değiştirme const iframeEl = document.getElementById('my-iframe'); iframeEl.contentWindow.location.hash = 'data=some_value'; // iframe'de hash'i okuma window.addEventListener('hashchange', function() { const hash = window.location.hash; console.log('Hash değişti:', hash); // Hash'ten veri ayrıştırma }); -
location.hrefdeğişikliği (daha az tercih edilir):- URL'yi değiştirerek veri iletmek ve sayfayı yeniden yüklemek.
- Sık sık veri alışverişi için uygun değildir.
-
Paylaşılan depolama (Same-Origin):
localStoragevesessionStorage.- Eğer iframe ve ana sayfa aynı alan adında ise, aynı depolamayı kullanabilirler.
// Ana pencerede localStorage.setItem('sharedData', JSON.stringify({ value: 'Örnek' })); // iframe'de const data = JSON.parse(localStorage.getItem('sharedData')); console.log('localStorage verisi:', data);
Yöntem seçimi, güvenlik politikası (Same-Origin Policy) ve iletilen veri miktarına/türüne bağlıdır. PostMessage, çapraz alan adı alışverişleri için en esnek ve güvenli çözümdür.