我有一些旧的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 = [];
}
但我仍然对修改浏览器本机对象的原型感到不满。
答案 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();