如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)

Posted

技术标签:

【中文标题】如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)【英文标题】:How to determine if jQuery is running on a page (even if jQuery is /after/ the detection script)如何判断 jQuery 是否在页面上运行(即使 jQuery 是 /after/ 检测脚本) 【发布时间】:2011-03-03 22:31:22 【问题描述】:

我正在开发一个可以嵌入到 youtube 视频之类的页面中的 do-dad。我想要的特殊效果需要 jQuery 才能工作。

我想在页面上的某些内容尚未添加 jQuery 的情况下加载 jQuery。

我想测试

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

但这只有在页面到达我的脚本时加载并运行 jQuery 才有效。由于这些天的最佳做法是将脚本嵌入到页脚中,因此我的嵌入代码可能大部分时间都不会看到 jQuery。

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

最后,我想在超时延迟后测试 jQuery,但这似乎充其量是不优雅的,最坏的情况是不可靠。

有什么想法吗?

【问题讨论】:

"if (typeof($)=='object')..." 这根本行不通。 typeof $ 应该是“函数”,而不是“对象”。我还会检查jQuery,而不是$,以防使用noConflict。 (还要注意typeof 是一个运算符,而不是一个函数;不需要在其操作数周围加上括号,除非它的操作数是一些复杂的表达式……尽管它们几乎没有什么害处。) @T.J. Crowder:嗯,哎呀,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 发生在加载周期的后期非常,不过,在所有图像都加载完毕之后。

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

    (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,我的猜测(未经测试)是它不会被加载......除非其他人正在做你正在做的事情。 :-)

【讨论】:

【参考方案2】:

您可以使用window.onload。这会在 domReady 之后触发,因此此时肯定会加载 jQuery。

并检查jQuery,而不是$。有时人们将 jQuery 与其他库一起使用,并使用 $ 来做不同的事情。

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

【讨论】:

【参考方案3】:

我已经使用这段代码来做这件事有一段时间了。它还在加载之前检查 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);

【讨论】:

他说“即使jQuery是/after/检测脚本”。然后他在文本中继续讨论它。这显然是他所要求的重要部分。 谢谢...我一定错过了那个细节。

以上是关于如何判断 jQuery 是不是在页面上运行(即使 jQuery 是 /after/ 检测脚本)的主要内容,如果未能解决你的问题,请参考以下文章

JS或JQUERY如何判断A页面是从其他页面返回的,而不是首次加载

即使我离开然后使用Jquery返回页面,如何将内容保留在页面上

jquery或者js如何判断当前网络是不是畅通,我的页面是给手机用的

判断jQuery是不是没有找到任何元素

如何判断一个页面是不是在iframe中使用javascript?

jquery如何判断滚动条滚到页面底部并执行事件