2015-10-13 85 views
2

我有一個網站,顯示特定信息的iframe。他們都來自同一個領域。因此任何用於跨站點腳本的塊都不應該成爲問題。如何獲取iframe的文檔對象?

iframe中的HTML頁面現在使用一些JavaScript來改變DomElement,這取決於特定的用戶操作,我嘗試更改css。 所以我下面JavaScriptCode:

var oldlink = document.getElementsByTagName("link").item(1); 
 
    
 
var newlink = document.createElement("link"); 
 
newlink.setAttribute("rel", "stylesheet"); 
 
newlink.setAttribute("type", "text/css"); 
 
newlink.setAttribute("href", cssFile); 
 
    \t 
 
document.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink);

這在獨立工作正常。現在的問題是它嵌入在iframe中。我現在從主/母文檔獲取文檔,而不是從自己的(子文檔)文檔獲取文檔。 有誰知道這是爲什麼?它似乎在Firefox中工作,但不在Chrome和IE中。

當查找「錯誤」文檔時,我會在DeveloperTools中得到一個錯誤,指出:要替換的節點不是此節點的子節點。

我知道它找不到Node,因爲它不在父文檔中,而是在子文檔中。

任何人對我如何解決這個問題或我需要查找的想法?我發現的唯一的東西是如何訪問父或子文件,這實際上是我不想要的行爲。

Thansk任何想法

回答

2

與其說清楚自己想要什麼,但如果你想更新你需要通過iframe的文檔like this更換「文件」框架內的元素:

var iframe = document.getElementById('iframeId'); 
var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 

然後你代碼將是這樣的:

var oldlink = innerDoc.getElementsByTagName("link").item(1); 

var newlink = innerDoc.createElement("link"); 
newlink.setAttribute("rel", "stylesheet"); 
newlink.setAttribute("type", "text/css"); 
newlink.setAttribute("href", cssFile); 

innerDoc.getElementsByTagName("head").item(0).replaceChild(newlink, oldlink); 
+1

謝謝,這是做的伎倆。 我現在也加載這樣的頭像:'var head = document.head || document.getElementsByTagName( 「頭」)[0];' – eagle