2013-05-20 22 views
11

İki iFrames birbiriyle nasıl konuşabilir? Örneğin, 2. iframe'den bir öğe değeriydim ve 1. iframe üzerinde görüntüleme öğesi var. İkinci çerçeveden değeri 1'e çıkarmalıyım. Bunu nasıl yapardım? Tanımlama bilgileri kullanmayın, bu da büyük miktarda veriyle zarar görmesine neden olur.iFrames arasındaki iletişim?

+4

Birincisi, aynı etki alanında iframe'ler nelerdir? Yoksa farklı sitelerden mi? – BBog

+1

https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage – epascarello

+0

Aynı alan adındalar. Bu nedenle, her ikisi de http://www.example.com – Matthew

cevap

17

öğeleri aynı etki alanından yayınlanıyorsa, birbirlerine doğrudan erişebilirler. Örneğin, iframe1 size yapabileceği:

document.getElementById('someDiv').innerHTML = 
    top.document.getElementById('otherIframe').contentWindow. 
    document.getElementById('someOtherDiv').innerHTML; 
+0

üzerindedir. Üst kısımda kullanmak, bu kodun kendisinin bir çerçeveye asla yüklenmeyeceği varsayımını yapar, aksi halde beklediğiniz şeylere işaret etmez. –

+0

@MattBerkowitz ne demek istiyorsun? Bir sayfada iki iframe varsa ve onlardan 'top' olarak adlandırırsanız, size diğer iframe'yi bulabileceğiniz içeren bir pencere verir. – jbabey

+16

Hayır, size en üstteki çerçeveyi verebilir, bu ebeveyn veya büyükbaba veya büyükbaba olabilir, vb. Daha önce bahsettiğiniz kurumu başka bir iframe içine yükleyiniz (sayfamızın bir iframe kime yüklenebileceğini kontrol edemeyiz). Büyük olasılıkla bir 'otherIframe' (CORS gereksinimlerini bile tatmin etmeyecek) bulabileceğiniz en dış sayfayı döndür. "Üst" yerine "üstteki" yi kullanmak, yaptığınızı düşündüğünüzü yaptığınızdan emin olduğu için biraz daha iyi olacaktır. –

5

İkinizin de iframe'lerde için tam kod-modifikasyon yeteneklerini ihtiyaç duyacağı ilk sizi uyarmak gerekir. Iframe'ler sıkı güvenlik ile ele alınır; Aksi takdirde, "bunkofamerica.com" alan adı oluşturabilir, iframe’e "bankofamerica.com" yazabilir ve daha sonra kullanıcının parolasını yazarken analiz edebilirim. (Bankalar ... yine de iframe bozma zaten kodu, ama sahip olma eğilimindedir)

Bu yerel işleviyle arıyorsanız: Burada https://developer.mozilla.org/en-US/docs/Web/API/window.postMessage

Ve benim şirket bu daha çapraz yapmak için kullandığı bir github kütüphanesi tarayıcı uyumlu: iframe'ler aynı etki alanında ve protokolde ise, o zaman daha kolay, jbabey doğrudur.

Opera Dokümanlar, https://dev.opera.com/articles/window-postmessage-messagechannel/#channel

0

İlk şeyler ilk iyi ilgili örneklerle her iki yerde de yüklenen içerik aynı etki alanından aksi takdirde gidiyoruz ise kendini mi bir çerçeve dışında etkileşim tek yolu bu açıkladı bir CORS hatası almak için.

Tümüyle sos olduğu varsayıldığında, üst çerçevenin pencere nesnesinde bir yönetici nesnesi oluştururdum. Eğer window.parent.Mgmt.frame1 kullanarak bu nesneye erişim mümkün olmalıdır Iframe'lerde biriyle ardından

window.Mgmt = { 
    frame1: $('iframe#frame1'), 
    frame2: $('iframe#frame2') 
} 

vb tüm

İlgili konular