由于某种原因,我的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");
}
答案 0 :(得分:14)
这可能是因为目标网页正在加载框架或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将被一次复制到本地计算机上并从那里运行 - 消除了脚本运行时有时几秒钟的延迟。
如果您使用其中一个GM模拟扩展程序,例如TamperMonkey,则此类脚本可以在Chrome中运行。