2011-05-03 40 views
4

。我复制'n'pasted以下片段,“测试”警报显示两次。为什么jQuery在我的GreaseMonkey脚本中加载两次因为某种原因,我的Firefox4 + GreaseMonkey脚本加载jQuery两次,我的GreaseMonkey Script

问候

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

回答

13

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

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

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


此外,如果你只是用FF + GM,不要与所有rigamarole加载jQuery的麻烦。通用现在可以使用后来的jQuery版本。

只需添加一行:

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

到脚本中的元数据块。 jQuery将被复制一次到您的本地机器上并从那里运行 - 消除有时会在脚本的运行时延迟几秒钟。

而这样的脚本可以在Chrome中运行,如果您使用GM仿真扩展之一如TamperMonkey

+1

太好了。非常感谢! – 2011-05-04 11:08:22

+0

是的,非常感谢! – AlixB 2014-08-08 08:52:26