如何防止IE10在尝试使用DomObject.filters属性时崩溃?

时间:2013-05-14 20:27:02

标签: javascript internet-explorer internet-explorer-10

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

这是崩溃的代码:

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

该代码不会在ie8 / 9中崩溃,因为DOM元素具有非标准属性“filters”。

以下是filters property的文档。

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

那么当我试图使用DomObject.filters属性时如何防止IE10崩溃呢?

[编辑] 我刚刚找到了一个“解决方案”。这也是@JAM's solution.

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

但我仍然对修改浏览器本机对象的原型感到不满。

2 个答案:

答案 0 :(得分:1)

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

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

甚至更好(正如你建议的那样):

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

这将设置对象的filters属性(如果它不存在。

答案 1 :(得分:1)

嗯,使用功能检测而不是浏览器检测?请isInternetExplorer,但doesSupportFilters

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