Javascript 如何防止IE10在尝试使用DomObject.filters属性时崩溃?
我有一些旧的JavaScript代码,在IE10上崩溃时我无法更改(我可以更改其他脚本文件) 以下是崩溃代码:Javascript 如何防止IE10在尝试使用DomObject.filters属性时崩溃?,javascript,internet-explorer,internet-explorer-10,Javascript,Internet Explorer,Internet Explorer 10,我有一些旧的JavaScript代码,在IE10上崩溃时我无法更改(我可以更改其他脚本文件) 以下是崩溃代码: if(isInternetExplorer && this.domElement.filters[0]) this.domElement.filters[0].play() 该代码在ie8/9中不会崩溃,因为DOM元素具有非标准属性“filters” 以下是要提交的文档 我能想到的唯一解决方案是更改HtmleElement的原型,但我觉得这实际上是不可能的,也不是
if(isInternetExplorer && this.domElement.filters[0])
this.domElement.filters[0].play()
该代码在ie8/9中不会崩溃,因为DOM元素具有非标准属性“filters”
以下是要提交的文档
我能想到的唯一解决方案是更改HtmleElement的原型,但我觉得这实际上是不可能的,也不是一件好事
那么,当IE10尝试使用DomObject.filters属性时,如何防止它崩溃呢
[编辑]
我刚刚找到了一个“解决方案”。这也是:
但是我仍然对修改浏览器本机对象的原型感到遗憾。正如您所说,覆盖对象的原型是一种方法因此,如果没有其他选择您可以尝试以下方法:
Object.prototype.filters=Object.prototype.filters | |[]
或者更好(正如你建议的那样):
htmldevelment.prototype.filters=htmldevelment.prototype.filters | |[]
如果对象不存在,这将设置对象的filters属性。嗯,是否使用特征检测而不是浏览器检测?请不要使用Internet Explorer
,但不支持筛选器
:
var el = this.domElement;
if (el.filters && el.filters.length && typeof el.filters[0].play == "function")
el.filters[0].play();
什么是Internet Explorer
,你能覆盖它吗?不,我不能覆盖它。当你说“崩溃”——它真的会崩溃浏览器吗?有复印页吗?脚本崩溃了。我将制作一个JSFIDLE。就是这么简单:。进去看看。它将在IE10上崩溃,但不是我编辑了我的问题,它没有必要有一个默认的对象与播放功能。查看我的编辑。@Jean PhilippeLeclerc让我知道这是否解决了您的问题:)它实际上解决了问题。我仍然会等待更多的答案,以防有其他类似的神奇解决方案。@Jean-PhilippeLeclerc Great:)-1作为修改对象。这样的原型打破了中的每一个-枚举!引用问题:“我有一些旧的JavaScript代码,我无法更改…”
var el = this.domElement;
if (el.filters && el.filters.length && typeof el.filters[0].play == "function")
el.filters[0].play();