IE 11 上的 MutationObserver 语法错误

Posted

技术标签:

【中文标题】IE 11 上的 MutationObserver 语法错误【英文标题】:MutationObserver syntax error on IE 11 【发布时间】:2018-11-08 15:24:31 【问题描述】:

我正在使用 MutationObserver 在切换面板内容时更改某些变量的值(我正在使用 Bootstrap 选项卡)。在 Chrome 和 Firefox 中一切正常,但由于某种原因,当我用 IE 测试它时,它在控制台中显示语法错误并且脚本中断。这是我的 MutationObserver 代码:

var observer = new MutationObserver(function (MutationRecords, MutationObserver) 
        dataTable = null;
        tabla = null;
        tabActiva = $('.tab-content').find('.active');
        formFiltro = tabActiva.find('form');
        tabla = tabActiva.find('table');
    );

    observer.observe(target, 
        childList: true,
        attributeFilter: ['class'],
        subtree: true
    );

控制台指出错误在observer.observe() 上。我不知道发生了什么。提前致谢。

以防万一,这是我的“目标”:

var target = $('.tab-content > .tab-pane').get(0);

【问题讨论】:

它到底说的是什么错误?这看起来不像是语法错误 调试器截图:prntscr.com/jo9uo6 如果我评论observer.observe() 行,它可以工作,但我需要那行。 你能发布 actual 错误(可以在控制台中看到的那个)吗?无论是什么 IDE,都没有提供任何细节 @CertainPerformance 那是实际的错误。他提供了 IE11 控制台的屏幕截图作为分离窗口。 【参考方案1】:

使用MutationObserver,可以过滤属性,但前提是您首先要观察元素属性。因此,选项 attributeFilter 仅在 attributes 设置为 true 时适用。

如果您指定 attributeFilter 而不将 attributes 设置为 true,则 IE11 将引发语法错误,而 Chrome 和 Firefox 将默默地忽略 attributeFilter

要解决语法错误,请将attributes 设置为true 或删除attributeFilter

【讨论】:

【参考方案2】:
    根据MDN,如果指定了attributeFilter属性,

没有必要也将attributes 设置为true,因为这是暗示的。

    DOM Living Standard specification 将 attributeFilter 定义为

如果不是全部,则设置为属性本地名称列表(没有命名空间) 需要观察属性突变并且attributestrue省略


IE11 似乎不是这种情况 - 它不符合规范。 IE11 的解决方法:设置attributeFilter 也设置attributes: true

【讨论】:

以上是关于IE 11 上的 MutationObserver 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

MutationObserver 上的 Angular 指令单元测试失败:参数 1 不是“节点”类型

MutationObserver:忽略一个 DOM 动作

JS-监听整个页面上的DOM树变化

使用 MutationObserver 检测输入值变化

如何在 MutationObserver 的回调中“暂停”观察

Windows 10上的IE 11 VS 10上的Windows 11