2010-10-22 36 views
42

tôi có mã HTML này:Nhận tài liệu IFrame, từ JavaScript trong tài liệu chính

<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> 

Vấn đề là tôi nhận được thông báo "Bad". Điều đó có nghĩa là tài liệu của khung nội tuyến không được nhận chính xác và những gì được trả về bởi hàm GetDoc là tài liệu gốc.

Tôi sẽ biết ơn, nếu bạn nói nơi tôi làm sai. (Tôi muốn nhận tài liệu được lưu trữ trong IFrame.)

Cảm ơn bạn.

+0

Điều này đã được yêu cầu vào năm 2010, hôm nay vào năm 2015, điều này sẽ không hoạt động trong bất kỳ trình duyệt mới nào, trừ khi bạn đang phát triển lên google.com. Do chính sách nguồn gốc chéo, bạn không thể truy cập nội dung của khung nội tuyến, nếu nó trỏ đến một trang trên một miền khác với tên miền mà tài liệu gốc của bạn được tải. – aorcsik

Trả lời

93

Bạn sẽ có thể truy cập vào tài liệu IFRAME sử dụng đoạn mã sau:

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

Tuy nhiên, bạn sẽ không thể làm điều này nếu trang trong khung được nạp từ một tên miền khác nhau (chẳng hạn như google.com). Điều này là do trình duyệt của Same Origin Policy.

+2

Huh? Điều đó sẽ trả về 'undefined' (hầu hết các trình duyệt) hoặc tài liệu mà phần tử'