У нас есть веб-сайт, который широко использует jQuery и отлично работает в Firefox и IE. Однако в Chrome мы часто (и полу-случайным образом) получаем Uncaught TypeError: Cannot call method 'apply' of undefined
(вместо apply
появляются другие методы jQuery).
Нам удалось отследить проблему до метода 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, страница для воспроизведения проблемы прилагается.