2010-06-30 58 views
7

讓我們想象一下,我有這樣的事情:如何在不知道id的情況下從內頁獲取父級iframe元素?

<html> 
... 
    <div> 
     <iframe src="test.html" hash="r4d5f7"></iframe> 
     <iframe src="test.html" hash="8f7x97"></iframe> 
     <iframe src="test.html" hash="gg4v5e"></iframe> 
     <iframe src="test.html" hash="e54f87"></iframe> 
    </div> 
... 
</html> 

test.html的是空白頁,自定義hash屬性總是有不同的值,這兩個網頁出於安全原因,數量和iframe的順序相同的域元素是隨機的。

我的問題是:有沒有一種方法可以從內部頁面(test.html)使用Javascript獲得適當的iframe元素?比方說,我在第三個iframe的頁面中,我需要到它的iframe元素和alert()散列值(在本例中爲「gg4v5e」)。

更具體一點。如果你熟悉Firefox的螢火蟲,它形象化這種情況是這樣的:

<html> 
... 
    <div> 
     <iframe src="test.html" hash="r4d5f7"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="8f7x97"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="gg4v5e"> 
      <html> 
       ... 
      </html> 
     </iframe> 
     <iframe src="test.html" hash="e54f87"> 
      <html> 
       ... 
      </html> 
     </iframe> 
    </div> 
... 
</html> 

是否有可能爲了獲得父元素()來調用「東西」時,我和我的JavaScript在<html>元素內頁?

回答

16

當然有。 此代碼工作在FF和IE6,歌劇,鉻(需要一個Web服務器和文件都從同一個域協議和端口來)

 function getHash() { 
      var ifs = window.top.document.getElementsByTagName("iframe"); 
      for(var i = 0, len = ifs.length; i < len; i++) { 
       var f = ifs[i]; 
       var fDoc = f.contentDocument || f.contentWindow.document; 
       if(fDoc === document) { 
       alert(f.getAttribute("hash")); 
       } 
      } 
     } 
+0

在同一臺服務器,協議和端口要求是針對Chrome – naikus 2010-06-30 17:32:03

相關問題