如何防止IE10崩溃时,它试图使用DomObject.过滤器属性

How to prevent IE10 from crashing when it tries to use the DomObject.filters property?

本文关键字:DomObject 属性 过滤器 IE10 何防止 崩溃      更新时间:2023-09-26

我有一些旧的JavaScript代码,我不能更改在IE10上崩溃(我可以更改其他脚本文件)。

下面是崩溃代码:

if(isInternetExplorer && this.domElement.filters[0])
  this.domElement.filters[0].play()

这段代码不会在ie8/9中崩溃,因为DOM元素有非标准属性"filters"。

下面是filters属性的文档。

我能想到的唯一解决方案是改变HtmlElement的原型,但我不觉得这实际上是可能的,或者是一件好事。

所以我怎么能防止IE10崩溃时,它试图使用DomObject。过滤器财产吗?

[编辑]我刚刚找到了一个"解决方案"。这也是@JAM的解决方案:

if (!HTMLDivElement.filters) {
    HTMLDivElement.prototype.filters = [];
}

但是我还是觉得修改浏览器原生对象的原型很糟糕。

正如你所说,重写对象的原型是一种方法;所以如果没有其他的你可以试试这个:

Object.prototype.filters = Object.prototype.filters || []

或者更好(就像你自己建议的那样):

HTMLDivElement.prototype.filters = HTMLDivElement.prototype.filters || []

如果对象不存在,则设置该对象的filters属性。

嗯,用特征检测代替浏览器检测?没有isInternetExplorer,只有doesSupportFilters:

var el = this.domElement;
if (el.filters && el.filters.length && typeof el.filters[0].play == "function")
    el.filters[0].play();