IE Javascript错误“对象不支持此属性或方法”在jQuery中

出于某种原因,我在jquery.js(版本1.4.3,非压缩版本)的第3156行上的Internet Explorer 8中收到以下Javascript错误: Object doesn't support this property or method 。 Firefox和谷歌浏览器中没有错误。

这是错误发生的行:

 if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { 

调查( console.log(Expr.leftMatch[type]) )产生以下有趣结果:在谷歌浏览器中,它输出

 /(^(?:.|\r|\n)*?):((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\3\))?(?![^\[]*\])(?![^\(]*\))/ 

但是在Internet Explorer中,这是输出:

 function() { var p = this; do p = p.previousSibling; while (p && p.nodeType != 1); return p; } 

在哪个exec上不能被调用(它是未定义的)。 引用的函数在jquery.js中不存在。 有没有人知道为什么会发生这种情况,或者我能做些什么来解决它?

遗憾的是,我还没有能够创建一个简单的脚本来重现问题,虽然我确实发现这个post有人有同样的问题 ,但它没有提供解决方案(最后一篇文章建议页面应该运行标准模式,但我的已经是)。

事实certificate,经过几个痛苦的小时后,我成功地自己解决了这个问题。 如果您已在其他位置定义了Object.prototype.previousObject ,则Sizzle选择器引擎似乎以此意外方式(并且仅在Internet Explorer中) Object.prototype.previousObject

删除该声明,或将previousObject重命名为其他内容可以解决问题。

有趣的是,我甚至自己把那些代码放在那里( Object.prototype.previousObject = [the function in my question] ),但我不认识代码。

嗯,这是另一天充满了发展潜力的浪费。

(不幸的是我的声誉是这样的,我不能直接评论上面的解决方案)

我发现如果您尝试将一个名为“inherited”的方法添加到Object.prototype,即Object.prototype.inherited = ,则会发生相同的行为

它影响IE6,7和8但似乎在IE9(beta)中得到修复

仅供参考,我们在重新定义Object.prototype.keys时也遇到了同样的问题。

你在运行什么版本的IE?

您是否有机会在兼容模式下运行? 如果您在本地域上进行测试,默认情况下IE会设置兼容性模式,并且我遇到了类似这样的随机问题。

如果您运行的是IE 8,可以尝试在开发人员工具(f12)中更改浏览器模式,以查看问题是否仍然存在。