我对GreaseMonkey完全不熟悉,但我正在尝试制作一个小脚本。
// ==UserScript==
// @require http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// ==/UserScript==
(function() {
$ = unsafeWindow.jQuery;
alert($); // this gives 'undefined'
}());
为什么警报会提供undefined
以及如何解决此问题?
更新
我试过了:
(function(){
//boilerplate greasemonkey to wait until jQuery is defined...
function GM_wait()
{
alert('ok');
if(typeof unsafeWindow.jQuery == 'undefined')
window.setTimeout(GM_wait,100);
else
unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
}
GM_wait();
function letsJQuery($)
{
alert($);
}
})();
但这给了我一个无限循环的ok-alert。似乎jQuery根本没有加载。
答案 0 :(得分:5)
修改:可能是this吗?
也许你没有最近版本的Greasemonkey。版本0.8增加了@require。此外,请记住 @require仅在首次安装脚本时处理。如果更改了所需脚本的列表,则需要将其卸载并重新安装; Greasemonkey在安装时下载所需的脚本,然后使用缓存的副本。
GM脚本可以在页面准备好之前(即在jQuery初始化之前)执行。我在Greasemonkey脚本中使用此代码以使用jQuery:
(function(){
//boilerplate greasemonkey to wait until jQuery is defined...
function GM_wait()
{
if(typeof unsafeWindow.jQuery == 'undefined')
window.setTimeout(GM_wait,100);
else
unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
}
GM_wait();
function letsJQuery($)
{
//whatever
}
})();
答案 1 :(得分:1)
@require
用于执行一次性资源下载
首次安装时,资源将被下载并放置在脚本的文件夹中。
然后在用户脚本之前执行所需的脚本
它在与用户脚本相同的范围内运行,而不是在unsafeWindow
下
如果您自己编写脚本,那么在实际安装之前它将无法获取资源(或编辑GM xml文件以识别资源并在firefox的用户配置文件目录中在脚本的目录中植入文件)。
如果您选择(更简单)卸载\重新安装方法,请不要忘记备份您的用户脚本...:)
答案 2 :(得分:1)
较新的greasemonkey需要添加// @grant none
才能使用// @require