2010-10-22 9 views
42

Mam ten kod HTML:Pobierz dokument iframe, od JavaScript w dokumencie głównym

<html> 
    <head> 
    <script type="text/javascript"> 
     function GetDoc(x) 
     { 
     return x.document || 
      x.contentDocument || 
      x.contentWindow.document; 
     } 

     function DoStuff() 
     { 
     var fr = document.all["myframe"]; 
     while(fr.ariaBusy) { } 
     var doc = GetDoc(fr); 
     if (doc == document) 
      alert("Bad"); 
     else 
      alert("Good"); 
     } 
    </script> 
    </head> 
    <body> 
    <iframe id="myframe" src="http://example.com" width="100%" height="100%" onload="DoStuff()"></iframe> 
    </body> 
</html> 

Problemem jest to, że otrzymuję komunikat „Bad”. Oznacza to, że dokument iframe nie jest poprawny, a fakt zwracany przez funkcję GetDoc jest dokumentem nadrzędnym.

Byłbym wdzięczny, gdybyś powiedział, gdzie popełniam swój błąd. (Chcę uzyskać dokument hostowany w IFrame).

Dziękuję.

+0

Zostało to zadane w 2010 roku, dzisiaj w 2015 roku, to nie działałoby w żadnej nowszej przeglądarce, chyba że pracujesz nad witryną google.com. Z powodu zasad dotyczących pochodzenia krzyżowego nie można uzyskać dostępu do zawartości elementu iframe, jeśli wskazuje ona stronę w innej domenie niż ta, z której został załadowany oryginalny dokument. – aorcsik

Odpowiedz

93

powinny być w stanie uzyskać dostęp do dokumentu w iframe stosując następujący kod:

document.getElementById('myframe').contentWindow.document 

Jednakże, nie będzie w stanie to zrobić, jeśli strona w ramce jest ładowany z innej domeny (takich jak google.com). Dzieje się tak z powodu przeglądarki Same Origin Policy.

+2

Huh? To spowoduje powrót do 'undefined' (większość przeglądarek) lub do dokumentu, w którym znajduje się element'