我们有一个广泛使用 jQuery 的网站,它在 Firefox 和 IE 中运行良好。然而,在 Chrome 中,我们经常(和半随机地)获得Uncaught TypeError: Cannot call method 'apply' of undefined
(其他 jQuery 方法也出现在 的位置apply
)。
我们设法将问题追溯到 jQuery 方法pushStack()
。
原始源代码(jQuery 1.7.1):
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = this.constructor();
// (etc.)
}
检测代码:
pushStack: function( elems, name, selector ) {
if (!(this instanceof jQuery.fn.init)) throw this;
// Build a new jQuery matched element set
var ret = this.constructor();
if (!(ret instanceof jQuery.fn.init)) {
console.log("pushStack>this: " + this.constructor);
console.log("pushStack>ret: " + ret.constructor);
throw ret;
}
// (etc.)
}
在大多数情况下pushStack()
运行正确。然而,有时 Chrome 会构造一个类型的对象Object
而不是jQuery.fn.init
. 控制台输出:
pushStack>this: function ( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
}
pushStack>ret: function Object() { [native code] }
Uncaught #<Object>
有没有人遇到过类似的问题?它是 Chrome 的(已知)错误吗?
更新
我设法简化了我们的页面,以便它可以自己加载。我在 Chromium 项目项目中填写了错误,复制问题的页面附在此处。