为什么jQuery在我的GreaseMonkey脚本中加载两次

Fab*_*ndl 7 javascript jquery greasemonkey

由于某种原因,我的Firefox4 + GreaseMonkey脚本加载了两次jQuery.我复制'n'pasted以下片段,"测试"警报显示两次.

问候

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

Bro*_*ams 18

这可能是因为目标页面正在加载帧或iframe.

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

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


此外,如果您只是使用FF + GM,请不要费心去加载jQuery.GM现在可以使用后来的jQuery版本.

只需添加如下行:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
Run Code Online (Sandbox Code Playgroud)

进入脚本的元数据块.jQuery将被复制一次到本地机器上并运行从那里-消除什么有时可以在你的脚本的运行时几秒钟的延时.

如果你使用像TamperMonkey这样的GM模拟扩展程序,这些脚本可以在Chrome 运行.