2010-04-22 20 views
5

Czy można czytać/edytować zawartość iframe (nie tylko właściwości takie jak src) za pomocą skryptów znajdujących się na stronie, ale poza tą ramką? Wiem, że to niemożliwe, jeśli źródło pochodzi z innej strony, ponieważ byłaby to duża dziura serurity, ale pytam tylko, czy działa dla innej treści z tego samego źródła.JavaScript i to samo źródło iframes

+0

Myślę ten link mówi to wszystko [Skrypty iframe - samouczek i przykłady] (http://www.dyn-web.com/tutorials/iframes/) – mplungjan

Odpowiedz

0

jeśli iframe zawartość jest z tej samej domeny można uzyskać do niego dostęp za pomocą frames.myiframe.getElement...

0

Przeglądarka ogranicza dostęp do zawartości iframe/macierzystych do treści, które nie jest z tej samej domeny tylko. W przypadku żądań z tej samej domeny można uzyskać dostęp do treści za pośrednictwem window.parent lub przez myiframe.document.getElementById

3

Tak, możesz to zrobić, jeśli lokalizacja elementu iframe i strony nadrzędnej jest tego samego hosta (ta sama polityka początkowa).

Aby zapewnić przeglądarkę pozwoli Ci to zrobić, można użyć

document.domain = "example.com" 

na stronie nadrzędnej oraz w iframe. (Zauważ, że subdomain.example.com i example.com są różne)

metoda Dom dla robi to (strony nadrzędnej do iframe):

document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside."; 

document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();

contentWindow jest odpowiedzią i działa w większości, jeśli nie we wszystkich nowoczesnych przeglądarkach, z pewnością na chrome, ie7 + itd.

Aby przejść w drugą stronę (iframe do strony nadrzędnej):

top.document.getElementById("DivInTopParent") 
4

Aby dodać do tego, co już zostało powiedziane na temat interakcji z iframes załadowane z tej samej kategorii:

przeglądarka pozwoli na interakcję z iframe (lub ramki), o ile strony, która stara aby wykonać interakcję, a strona, którą wczytałeś, ma ten sam dokument.domain.

Możesz ustawić document.domain na przyrostek hosta, z którego zostałeś załadowany. na przykład jeśli masz stronę załadowany z blog.fred.com i chce współdziałać z jakiegoś serwisu o nazwie jsonservice.fred.com, obie strony będą musiały zrobić

document.domain = 'fred.com'; 

przed javascript z nich będzie w stanie współdziałać z inny.

Przeglądarki są na tyle mądry, aby nie pozwalają ustawić document.domain do „.com”, w przypadku, gdy zastanawiali ...

0

To nie jest dokładnie po stronie klienta JavaScript/roztwór, ale pomógł mi rozwiązać problem.

Musisz usunąć nagłówek X-Frame-Options, jeżeli występuje, a zamiast tego wysłać następujące jeden dla strony iframe:

Content-Security-Policy: frame-ancestors 'self' example.com *.example.com 

i dodatkowy jeden dla IE:

X-Content-Security-Policy: frame-ancestors 'self' example.com *.example.com 
Powiązane problemy