如何确定jQuery是否在页面上运行(即使jQuery是/ after /检测脚本)

我正在开发一个可以嵌入像youtubevideo这样的页面的do-dad。 我想要的特殊效果需要jQuery才能工作。

我想加载jQuery,条件是页面上的某些东西还没有添加jQuery。

我虽然在测试

if (typeof($)=='function'){... 

但是只有在页面到达我的脚本时加载并运行jQuery时才有效。 既然最近的最佳实践是将脚本嵌入到页脚中,那么我的嵌入代码可能永远不会在大多数情况下看到jQuery。

我想过onready而不是onload ,但onready函数是在jQuery中。 (我想我可以使用一个独立的脚本?有一个好的吗?)

最后,我虽然在超时延迟后测试jQuery,但这看起来不够优雅,最糟糕的是不可靠。

有什么想法吗?

鉴于您的限制,我只看到两个选项:

  1. 使用window.load事件:

     (function() { if (window.addEventListener) { // Standard window.addEventListener('load', jQueryCheck, false); } else if (window.attachEvent) { // Microsoft window.attachEvent('onload', jQueryCheck); } function jQueryCheck() { if (typeof jQuery === "undefined") { // No one's loaded it; either load it or do without } } })(); 

    window.load在加载周期中很晚才发生,但是在所有图像都被加载之后。

  2. 使用超时。 好消息是超时可能很短。

     (function() { var counter = 0; doDetect(); function doDetect() { if (typeof jQuery !== "undefined") { // ...jQuery has been loaded } else if (++counter < 5) { // 5 or whatever setTimeout(doDetect, 10); } else { // Time out (and either load it or don't) } } })(); 

    您必须调整以确定计数器和间隔的最佳值。 但是如果即使在第一个或第二个循环中也没有加载jQuery,我的猜测(未经测试)是它不会被加载...除非别人正在做你正在做的事情。 🙂

你可以使用window.onload 。 这在domReady之后触发,所以jQuery肯定会被这一点加载。

并检查jQuery ,而不是$ 。 有时人们将jQuery与其他库一起使用,并使用$来表示不同的东西。

但是,恕我直言,如果jQuery被加载两次,我认为这不是什么大问题。

我一直在用这段代码来做这件事。 在加载之前,它还检查jQuery的最小版本(在我们的例子中,我们仍然使用1.4.2):

 /* Checks if JQuery is loaded... if not, load it. */ /* Remember to update minimum version number when updating the main jquery.min.js file. */ if (typeof jQuery != 'undefined') { /* jQuery is already loaded... verify minimum version number of 1.4.2 and reload newer if needed */ if (/1\.(0|1|2|3|4)\.(0|1)/.test(jQuery.fn.jquery) || /^1.1/.test(jQuery.fn.jquery) || /^1.2/.test(jQuery.fn.jquery)|| /^1.3/.test(jQuery.fn.jquery)) { loadJQ(); } } else { loadJQ(); } /* loads jQuery if not already loaded, or if not a recent enough version */ function loadJQ() { /* adds a link to jQuery to the head, instead of inline, so it validates */ var headElement = document.getElementsByTagName("head")[0]; linkElement=document.createElement("script"); linkElement.src="../scripts/lib/jquery.min.js"; linkElement.type="text/javascript"; headElement.appendChild(linkElement); }