为什么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"); } 

这可能是因为目标页面正在加载框架或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 运行。