我一直在使用一個名爲tree-mirror.js的開源庫,它使用mutation-summary.js來完成DOM鏡像。樹型鏡像js和突變摘要是否支持iframe?
一切都很好,但iframes。當主文檔包含iframe時,在iframe中文檔的dom變化不會被這些庫捕獲。通過閱讀tree-mirror.js的代碼,我可以發現,它將突變觀察者綁定到主文檔,但不知道是否可以自動處理iframe文檔。
我不確定這是不是由圖書館支持或我失去了一些東西。有沒有人與這些庫工作,並遇到此問題?請幫助。
我一直在使用一個名爲tree-mirror.js的開源庫,它使用mutation-summary.js來完成DOM鏡像。樹型鏡像js和突變摘要是否支持iframe?
一切都很好,但iframes。當主文檔包含iframe時,在iframe中文檔的dom變化不會被這些庫捕獲。通過閱讀tree-mirror.js的代碼,我可以發現,它將突變觀察者綁定到主文檔,但不知道是否可以自動處理iframe文檔。
我不確定這是不是由圖書館支持或我失去了一些東西。有沒有人與這些庫工作,並遇到此問題?請幫助。
編輯:謝謝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的包裝器。
你錯過了一個事實,即iframe是一個單獨的文檔,所以要檢測你內部的突變需要在每個iframe中附加一個單獨的MutationObserver。 – wOxxOm
謝謝。我明白那個。我只是想知道,如果這些庫自動處理iframe,而沒有明確地將突變觀察者附加到每個iframe文檔。 –