2010-05-12 47 views
0

得到contentWindow的對象元素我有這樣的HTML對象元素:
<object title="Search results as XML" standby="Loading XML document..." type="text/xml" data="/__CA25761100195585.nsf/WebPrintListingXML?OpenAgent&date1=01/06/2009" width="100%" height="100%" border="0" name="resultIFrame" id="resultIFrame"> Error: could not embed search results. </object>我如何在IE7

我也有這樣的JavaScript函數(警報()調用添加用於調試):

function getFrameByName(fParent,fName) 
{ 
    var fArray=fParent.frames; 
    if (!fName) return; 
    if (fArray) { 
     if (fArray.length) { 
      for (var i=0; i<fArray.length; i++) { 
       alert('loop '+i); 
       if (fArray[i]) { 
        if (fArray[i].name==fName) return fArray[i]; 
       } 
      } 
     } 
    } 
    var tmp=document.getElementsByName(fName); 
    if (tmp[0]) { 
     alert('returning '+tmp[0]); 
     if (!(tmp[0].contentWindow)) alert('contentWindow is null'); 
     return tmp[0].contentWindow; 
    } 
}

最後,這個按鈕是爲了打印對象元素的內容:
<input type="button" value="Print" name="printBtn" onclick="getFrameByName(window,'resultIFrame').print();">

按鈕完美的作品在Firefox中。 Opera雖然打印主文檔而不是僅打印對象,但Opera足夠好。 IE7提供了以下錯誤信息:
行:57 字符:1個 錯誤:「未定義」爲空或不是對象

57行是按鈕的「輸入」標籤中的HTML源開始。 感謝在JS函數中調用alert('contentWindow is null'),我知道我在IE中獲得的對象沒有contentWindow屬性。

我曾試圖改變object標籤的iframe標籤。這會更改JS行爲,但會導致其他問題(如height屬性被忽略並且內容不顯示)。
堅持用object標記,我怎樣才能得到這個對象的窗口在IE7中?

回答

2

,如果你知道的iframe,以獲得其窗口對象的最簡單的方法名是通過調用window.frames [frameName。這將返回到窗口對象,而不是IFRAME參考

+0

當「iframe」實際上是'object'標記時,window.frames在IE7中不起作用。 – 2010-05-20 01:12:28

+0

我完全錯過了使用iframe的對象標籤的事實。但是,我只是在IE7模式下使用IE8進行測試,它工作。 我通過http://intranation.com/test-cases/object-vs-iframe/添加了一個名稱=「ifrm」給對象標籤,然後使用控制檯檢查我確實可以設置window.frames.ifrm.location =「http://www.google.com」 – 2010-05-21 15:54:56

0

我知道這個問題是舊的,但這裏是我的一些調查結果:

使用window.frames[frameName]的方法工作正常Firefox和Chrome,但包含了很多在IE中奇怪的怪癖。 在ff和chrome中,您可以通過window.frames[frameName].document訪問文檔元素,只需要將name屬性添加到對象標籤。

但在IE(8在我的情況),你需要調用contentDocument而不是document。沒關係,但這裏有些奇怪,如果還有另一個完全不相關的對象,其ID等於對象標籤的名稱,那麼IE會感到困惑並返回一個html集合,而包含ID元素和命名對象。然後,您需要從名單中篩選出來的對象用來訪問contentDocument性的指標,像這樣:window.frames[frameName][1].contentDocument

你可以使用jQuery獲取文檔的內容:$(window.frames[frameName].document).contents().find("selector");

呼,到目前爲止,這是所有我有。我認爲最好的方法是檢查'frame'是否包含IE的屬性'contentDocument',以及其他訪問普通'document'屬性的屬性。