我在我的页面中使用jQuery,当我使用Chrome开发工具时,我在控制台中发现了jQuery18007779947370290756和jQuery对象. jQuery18007779947370290756只包含几个方法. jQuery包含更多的方法.那么什么是jQuery18007779947370290756?我没有页面的url,因为它是内部页面.我包含的lib只是
jquery-1.8.0.min.js和jquery-ui-1.8.23和
没有 JSONP调用.
没有 JSONP调用.
看起来像是将全局事件’beforeunload’添加到窗口对象.并存储在窗口[expando]中.但是,如果我将某些事件添加到其他DOM对象(如按钮)中,并且它们存储在jQuery.cache中.
这里是jQuery.cache和window的屏幕截图[jQuery1800xxxxxxxxxxxxxxxx]
我不知道为什么2点击事件的guid都是8.这两个点击事件绑定到2个按钮.并且单击事件处理程序是相同的功能.
解决方法
当您在其上存储数据时,jQuery将此属性添加到元素中.由于此属性位于窗口元素上,因此您的代码中的某个地方正在做一些相当于:
$(window).data('something',1);
请注意,jQuery事件还会在幕后使用数据模块,因此也可能是因为向窗口对象添加事件.
对于普通节点(即具有nodeType属性的元素),此值为set to a GUID(data.js#61),并且要存储在该对象上的数据存储在全局jQuery缓存中.
然而,窗口元素没有nodeType属性,所以它下降了我是一个简单的JS对象的路由;这导致数据直接存储在对象本身(在窗口的情况下,可能是jQuery的一个bug).
缓存位置(全局或对象)的选择是在L39-45 in data.js:
// We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType,// Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem,
在普通DOM元素的情况下,该值将在data.js#61中分配一个GUID:
elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
但是在正常的JS对象(在这种情况下为窗口)的情况下,该对象内置于68 – 74:
cache[id] = {}; // Avoids exposing jQuery Metadata on plain JS objects when the object // is serialized using JSON.stringify if (!isNode) { cache[id].toJSON = jQuery.noop; }
奇怪的值是jQuery.expando,它在data.js#14中定义,并初始化为:
"jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g,"" )