【问题标题】:Why does jQuery load twice in my GreaseMonkey Script为什么 jQuery 在我的 GreaseMonkey 脚本中加载两次
【发布时间】:2011-05-03 23:26:09
【问题描述】:

由于某种原因,我的 Firefox4+GreaseMonkey 脚本加载了 jQuery 两次。我复制并粘贴了以下 sn-p,“测试”警报显示两次。

问候

var $;

// Add jQuery
(function(){
    if (typeof unsafeWindow.jQuery == 'undefined') {
        var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
            GM_JQ = document.createElement('script');

        GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
        GM_JQ.type = 'text/javascript';
        GM_JQ.async = true;

        GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
    }
    GM_wait();
})();

// Check if jQuery's loaded
function GM_wait() {
    if (typeof unsafeWindow.jQuery == 'undefined') {
        window.setTimeout(GM_wait, 100);
    } else {
        $ = unsafeWindow.jQuery.noConflict(true);
        letsJQuery();
    }
}

// All your GM code must be inside this function
function letsJQuery() {
    alert("test");
}

【问题讨论】:

    标签: javascript jquery greasemonkey


    【解决方案1】:

    这可能是因为目标页面正在加载框架或 iframe。

    将这些行添加到脚本代码部分的顶部:

    if (window.top != window.self)  //-- Don't run on frames or iframes
        return;
    


    此外,如果您只是使用 FF + GM,请不要为加载 jQuery 的所有繁琐而烦恼。 GM 现在可以使用更高版本的 jQuery。

    只需添加如下一行:

    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
    

    进入脚本的元数据块。 jQuery 将被复制一次 到您的本地机器上并从那里运行——消除有时可能会在脚本运行时出现几秒钟延迟的情况。

    如果您使用像 TamperMonkey 这样的 GM 模拟扩展程序之一,这些脚本可以在 Chrome 中运行。

    【讨论】:

    • 太棒了。感谢一百万次!
    • 上帝,如果没有你的回答,我永远不会得到答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多