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

Tra*_*ton 9 javascript jquery detect

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

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

我虽然在测试

if (typeof($)=='function'){...
Run Code Online (Sandbox Code Playgroud)

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

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

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

有什么想法吗?

T.J*_*der 8

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

  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
            }
        }
    })();
    
    Run Code Online (Sandbox Code Playgroud)

    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)
            }
        }
    })();
    
    Run Code Online (Sandbox Code Playgroud)

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