gpt4 book ai didi

javascript - Mutation Observer 未定义

转载 作者:数据小太阳 更新时间:2023-10-29 04:53:49 24 4
gpt4 key购买 nike

我正在尝试修复和发布我的代码。我最初使用 DOMNodeRemoved 和 DOMNodeInserted 来关注我正在处理的页面中的元素。它们运行良好但在 IE 中不起作用。所以我开始尝试使用 MutationObserver。

这是我在 onPageInit 上调用的代码(回调写入控制台,但我禁用了它,因为 IE 不再支持控制台):

var callback = function(allmutations){
allmutations.map( function(mr){
var mt = 'Mutation type: ' + mr.type; // log the type of mutation
mt += 'Mutation target: ' + mr.target; // log the node affected.
//console.log( mt );
})
}
mo = new MutationObserver(callback),
options = {
// required, and observes additions or deletion of child nodes.
'childList': true,
// observes the addition or deletion of "grandchild" nodes.
'subtree': true
}
alert('its alive');
mo.observe(document.body, options);

它在 chrome 中运行良好,但由于某种原因在 IE 中表现平平。我在页面加载期间收到一个消息框,上面写着:

An unexpected error occurred in a script running on this page.
onPageInit(pageInit)
scriptname

JS_EXCEPTION
TypeError 'MutationObserver' is undefined

我做错了什么吗?附加信息:页面是一个 netsuite 页面,运行 jQuery 1.7.2(如果重要的话)

最佳答案

如果您需要在 IE10+(以及其他尚不支持 MutationObserver 的浏览器)中检测 DOM 插入,您可以使用基于监听 animationstart 事件的技巧为不影响节点外观的属性设置动画的 CSS 动画。

这项技术是由 Daniel Buchner 发现的,您可以看到它对其进行了描述 this post by David Walsh

使其工作所需的代码如下所示:

@keyframes animationName{ 
from { outline: 1px solid transparent }
to { outline: 0px solid transparent }
}
* {
animation-duration: 0.001s;
animation-name: animationName;
}

document.addEventListener('animationstart', insertionHandler, false);

此技巧跨浏览器工作所需的设置非常复杂,包含所有前缀和事件监听器名称。将为每个新节点调用处理程序,并且很难选择要设置动画的属性。

这就是为什么我将它包装在一个库中以使其易于使用: https://github.com/naugtur/insertionQuery

这是一个简短的用法示例:

insertionQ('selector').every(function(element){
//callback on every new element
});

关于javascript - Mutation Observer 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20383356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com