出于某种原因,以下代码段只记录" false" 1000次以上,但从未"真实"。我无法弄清楚原因,因为它似乎适用于任何其他元素。
// create an observer instance
// log whether the mutation is made to an EMBED node
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.dir(mutation.target.nodeName == 'EMBED');
});
});
// configuration of the observer:
var config = {
attributes: true, // required
childList: true, // required
characterData: true, // required
subtree: true // get updates from the descendants, not just the children
};
// start observing immediately
// this works because "document" always exists
observer.observe(document, config);
我正在测试此页面上的代码,在最新的Opera中:
https://www.facebook.com/ccstandup/videos/vb.331786510170444/1177307595618327/
(如果您使用最新的Opera,它应该是使用EMBED实现的Flash视频,但在其他浏览器中它可能是视频。)
任何想法我做错了什么?
答案 0 :(得分:0)
target
是发生变化的元素。插入元素时,不是更改的元素,而是其父元素。检查mutation.target.nodeName == 'EMBED'
会检查嵌入元素的attributes
,childList
或characterData
是否已更改,但尚未更改。如果您需要查看插入embed
元素的时间,您需要从父元素的位置查看它,例如。
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type !== 'childList') return;
mutations.addedNodes.forEach(function(node){
if (node.nodeType !== Node.ELEMENT_NODE) return;
var embed = node.tagName.toLowerCase() === 'embed' ? node :
node.querySelector('embed');
// Found an embed element.
if (embed) console.log(embed);
});
console.dir(mutation.target.nodeName == 'EMBED');
});
});