2011-08-03 68 views
2

我有一個iframe,在JavaScript中啓用設計模式如下啓用iframe的設計模式

iframe.contentDocument.designMode="on"; 

如果我創造我的iframe嵌入,工作正常。但如果我在我的父頁面一個「src」屬性載入我的iframe和我打開設計模式如下:

iframes=document.getElementsByTagName('iframe'); 
for(iframe in iframes) 
{ 
iframes[iframe].contentDocument.designMode="on"; 
} 

那亙古不變的工作。我如何從容器頁面啓用iframe的設計模式,如果我加載指定src屬性的iframe?不是內聯! 感謝

+0

您是否從與父/包含站點相同的域加載iframe的內容?如果來自不同的網站,您將無法訪問iframe的DOM。 –

+0

是啊,即時通訊加載它從同一個domian ...而且我仍然無法修改加載的iframe的contentDocument屬性 – samach

回答

4

根據不同的瀏覽器,有一對夫婦的潛在問題:

  • 不是所有的瀏覽器(尤其是舊的)支持contentDocument
  • for...in不能保證在NodeList工作,這是getElementsByTagName()返回。改爲使用for循環。
  • 您可能需要等待所有的iframe加載。主文檔的load事件只會在所有iframe加載後觸發。

否則,只要IFRAME是從同一個域提供,也可以從包含文檔設置其文檔的designMode財產。以下內容應該可以工作:

window.onload = function() { 
    var iframes = document.getElementsByTagName('iframe'); 
    for (var i = 0, len = iframes.length, doc; i < len; ++i) { 
     doc = iframes[i].contentDocument || iframes[i].contentWindow.document; 
     doc.designMode = "on"; 
    } 
}; 
+0

非常感謝你tim..it作品。你的第三點是問題。我在加載iframe的同時設置iframes內容文檔屬性。因此它們被src文件的默認屬性覆蓋...雖然我知道爲什麼我不喜歡在循環中使用? – samach

+0

@Salman:'NodeList'是一個主機對象,它是由環境(在本例中爲瀏覽器)提供的對象。其他主機對象包括「文檔」,元素和文本節點。主機對象不受原生JavaScript相同的規則約束,並且基本上可以做他們喜歡的事情。 http://jsfiddle.net/QCPvy/ –