2010-10-22 58 views
42

在我有這樣的HTML代碼:獲取IFrame的文件,從JavaScript主文檔

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

的問題是,我得到消息「壞」。這意味着iframe的文檔沒有正確獲取,GetDoc函數返回的實際文檔是父文檔。

如果您告訴我我的錯誤在哪裏,我會很感激。 (我想在IFrame中獲取文檔。)

謝謝。

+0

這是2010年的問題,今天在2015年,這不適用於任何新的瀏覽器,除非您正在開發google.com。由於採用了交叉來源策略,如果它指向的頁面位於與原始文檔加載的頁面不同的域上,則無法訪問iframe的內容。 – aorcsik 2015-11-05 22:50:14

回答

93

你應該可以使用下面的代碼來訪問IFRAME文檔:

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

但是,如果在框架頁是從不同的域加載你將不能夠做到這一點(如google.com)。這是因爲瀏覽器的Same Origin Policy

+2

咦?這將返回'undefined'(大多數瀏覽器)或者'