突变观察者尚未定义
Mutation Observer is undefined
我正在尝试修复并解决我的代码问题。我最初使用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
我做错什么了吗?其他信息:页面是一个网络套件页面,运行jQuery 1.7.2(如果重要的话)
如果您需要在IE10+(以及其他还不支持MutationObserver
的浏览器)中检测DOM插入,您可以使用一个基于侦听animationstart
事件的技巧来制作CSS动画,该动画可以动画化不会影响节点外观的属性。
这项技术是由Daniel Buchner发现的,你可以看到它是由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
});
该方法是在IE11中添加的,因此,如果浏览器以兼容模式运行IE11以外的任何内容,则该方法将不可用。
http://msdn.microsoft.com/en-us/library/ie/dn265034(v=vs.85).aspx
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- 未激发路由的控制器属性上的观察者
- 将属性设置为未定义时未通知观察者
- 突变观察者尚未定义
- 未捕获的类型错误:无法执行'观察'在'突变观察者':参数1不是'节点'
- 突变观察者 - 未检测到添加的某些节点
- 未捕获的类型错误:无法读取未定义的属性“indexOf”(观察者脚本.js)
- 挖空嵌套模型可观察数组未定义
- 挖空扩展可观察 取消引用时返回未定义
- 当挖空可观察未定义或禁用 JS 时显示默认值
- 淘汰控制台日志和可观察到的未定义
- 变异观察者未被移除.为什么?(795978错误)
- 聚合物自定义元素观察者开火太早
- 变异观察者未开火
- RxJS -可观察模块-抛出未定义
- KnockoutJS计算可观察对象未定义
- 关于观察者和未消耗计算属性的混淆