什么可能导致jQuery本身中随机出现的错误
What could cause this randomly appearing error inside jQuery itself?
我对此感到头疼。每 5-10 次我重新加载我的应用程序一次,我会收到一个源自 jQuery 内部的奇怪错误。我尝试在非压缩版本的jQuery中添加断点以尝试退出错误,但Chrome从未停止过断点,而是总是跳过错误。
我使用的是jQuery 1.7.2,但此错误也发生在1.7和1.6.1版本中。
在我的javascript应用程序中,我调用以下代码行:
this.element.find('.banner-btn')
其中this.element
是一个jQuery对象。这没有理由引起问题,10 次中有 9 次没有问题。但是随机地发生了一些问题,然后每次调用该行代码时,结果都是此堆栈跟踪的某种变体:
Uncaught TypeError: Cannot call method 'apply' of undefined
makeArrayjquery-1.7.2.js:4858
Sizzlejquery-1.7.2.js:5110
jQuery.fn.extend.findjquery-1.7.2.js:5432
事实上,在此中断后的任何时间,我称之为 $.fn.find 我都会收到此错误。我已经尝试了各种各样的事情,我一直在阅读jQuery源代码,但我对此一无所知。有人知道该怎么确定吗?
更新:进一步深入兔子洞
我已经在jQuery库中进一步追逐了这个问题,并找到了错误首先弹出的位置。有点。
为了跟踪 DOM 遍历,jQuery 使用 pushStack 方法。这在jQuery.fn.find方法中被调用,并且应该返回一个jQuery对象。它通常确实如此 - 但是当jQuery内部有东西时,这个函数只返回一个常规对象,没有jQuery好东西。这会导致错误。
好的,这是 pushStack 的第一个源代码,定义在 jquery-1.7.2.js 的第 241 行:
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
if(window._debug_jQuery_pushStack) { debugger }
// Build a new jQuery matched element set
var ret = this.constructor();
// ---- the function continues, but this is enough for us ----
var ret = this.constructor();
位是应该添加jQuery好东西的地方。在这种情况下,他们不是。不知何故,this
已被损坏为常规对象,而不是jQuery。所以现在我的问题是:我如何找到这种腐败的原因?困难在于,在我的应用程序加载的 10 或 20 倍中,这种情况只发生一次,并且似乎是完全随机的。
问题不在于你的代码,而在于 Chrome 本身——参见错误 #125148。 当前的解决方法是更改 pushStack,如下所示:
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = this.constructor();
// temporary workaround for chrome issue #125148
// http://code.google.com/p/chromium/issues/detail?id=125148
if (!(ret instanceof jQuery.fn.init)) {
console.log("applying pushStack fix");
ret = new jQuery.fn.init();
}
// ... snip ...
另请参阅此相关问题。
我不认为这是jquery,而是你的代码中的某些东西,jquery正在响应它。我心目中的罪魁祸首是"未定义"。应用程序内部的jquery(也许是一个旨在成为数组的变量)正在操纵某些东西,导致这种情况发生。我最近在使用 backbone 和 jquery 进行 DOM 操作时.js看到了这一点。事实证明,偶尔,我的应用程序代码没有正确设置 var,并且 jquery 在发生这种情况时抛出错误。
所以我的建议是,如果你至少知道序列中发生错误的大致区域,请查看你的应用程序代码,看看那里的所有内容是否都是犹太洁食;你所有的变量都被分配了。可能存在未分配 var 的边缘情况,并且在该区域周围放置条件以防未分配,这很简单。
- Ajax更新面板随机错误'PRM_MissingPanel'
- 随机jquery移动/角度内部错误与安卓浏览器
- 输出中的随机字符串错误
- Javascript:随机“对象没有方法”错误,即使使用 jquery.getScript()
- JQuery - 随机 .replace() 错误
- JQuery 幻灯片错误.图片在页面上列出,而不是随机播放.找不到错误
- 什么可能导致jQuery本身中随机出现的错误
- CRM 2011 Outlook Client 中的随机 JavaScript 错误
- MS JScript运行时错误,在2或3次警报后随机获取
- Javascript-随机图像错误
- Android JNI JavascriptCore JSEvaluateScript随机给出解析错误
- 尝试显示随机任务时出现对象HTMLInputElement错误
- 随机函数触发$digest()错误
- JavaScript画布:“;随机的“;碰撞检测错误
- javascript类型错误:随机不是chrome上的功能
- 随机得到ECONNREFUSED错误
- Javascript随机无法对项目进行排序,没有错误
- 为什么当我给他一个负数和一个正数时,我的 JS 随机整数生成器如此错误
- jQuery-随机图像生成器(修复我的代码,可能只是语法错误)
- 随机jquery ajax错误readyState=0