2017-03-12 20 views
3

我一直在使用一個名爲tree-mirror.js的開源庫,它使用mutation-summary.js來完成DOM鏡像。樹型鏡像js和突變摘要是否支持iframe?

一切都很好,但iframes。當主文檔包含iframe時,在iframe中文檔的dom變化不會被這些庫捕獲。通過閱讀tree-mirror.js的代碼,我可以發現,它將突變觀察者綁定到主文檔,但不知道是否可以自動處理iframe文檔。

我不確定這是不是由圖書館支持或我失去了一些東西。有沒有人與這些庫工作,並遇到此問題?請幫助。

+1

你錯過了一個事實,即iframe是一個單獨的文檔,所以要檢測你內部的突變需要在每個iframe中附加一個單獨的MutationObserver。 – wOxxOm

+0

謝謝。我明白那個。我只是想知道,如果這些庫自動處理iframe,而沒有明確地將突變觀察者附加到每個iframe文檔。 –

回答

-1

編輯:謝謝wOxxOm在前面的答案中指出了錯誤的結論。

簡而言之,觀察iframe中的更改似乎不受MutationObserver API支持。考慮下面的例子:

var m = new MutationObserver((mutations) => { 
    mutations.forEach((mutation) => { 
    console.log(mutation) 
    }); 
}); 

// We observe child list and subtree changes 
m.observe(document.body, {childList: true, subtree: true}); 

// Let's create an iframe 
var iframe = document.createElement("iframe"); 

// A mutation record will be logged here 
document.body.appendChild(iframe); 

// However this will NOT log a mutation record 
iframe.contentDocument.body.appendChild(document.createElement("div")); 

所以我恐怕你在這裏運氣不好。就像在上面的評論中所說的,你將不得不在每個iframe中初始化一個新的突變觀察者,以便能夠觀察他們的DOM變化。所提及的這些庫都不支持這個功能,因爲它們大部分是本地MutationObserver API的包裝器。

+0

您的代碼不正確:您追加的新元素是由主文檔創建的,它不會附加到框架文檔中。在兩個操作中都使用iframe.contentDocument。 – wOxxOm

+1

下面是一個例子:'iframe.contentDocument.body.appendChild(iframe.contentDocument.createElement('span')).textContent ='test'' – wOxxOm

+0

好點子:你說得對。所以這個觀察明顯無效我上面說的:( – nardeas