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)中更改浏览器模式,以查看问题是否仍然存在。