如何在Greasemonkey中使用jQuery?


234

我试着把这一行,但不起作用:

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

jQuery根本无法在Greasemonkey中使用。还有其他在Greasemonkey中使用jQuery的方法吗?

-

对于所有有相同问题的人,您必须将文件上传到油膏,然后从那里安装。

“创建新脚本”选项不起作用!


14
@Jorge,您是否不知道该网站绝对没有魔力?您可以浏览到带有.user.js文件扩展名的任何内容,然后Greasemonkey会询问您是否要安装它。其中包括本地计算机上的文件。安装任何脚本就像将其拖到浏览器中一样简单。
罗伯·肯尼迪

5
现在看来,即使在安装后编辑文件时也可以正常工作。
约瑟夫·萨布(JosefSábl)2011年

6
Josef是对的- 从0.9.0版开始,Greasemonkey现在将在编辑文件后立即安装@required文件。
罗里·奥肯

1
同样不要忘记仍然$(document).ready(function() {...});在您的代码中使用
用户

1
刷新您的最简单方法@requires是在该@require语句的末尾添加一个哈希或查询字符串,并在需要更新时对其进行更改。类似于您“缓存”收藏夹图标的方式。 // @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js?v=changeme
阿帕奇

Answers:


189

也许您没有足够的Greasemonkey版本。添加的是0.8版本@require

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 

如果没有0.8,请使用Joan Piedra描述的技术script元素手动添加到页面

版本0.8和0.9之间,@require第一次安装脚本时才会处理。如果更改所需脚本的列表,则需要卸载脚本并重新安装;Greasemonkey在安装时下载一次所需的脚本,然后使用缓存的副本。

从0.9开始,Greasemonkey的行为已更改(以解决与切向相关的问题),因此它现在在每次编辑后都会加载所需的脚本;不再需要重新安装脚本。


罗布,那我该怎么办?我正在使用“新建用户脚本”链接创建用户脚本。我添加了@require,但它不起作用。那我该如何运作呢?请说明我希望@require方法起作用,因为它比脚本元素方法优雅得多
Keira Nighly 09年

1
好的,所以我成功了。谢谢!!!我将脚本上传到Greasespot并从那里安装。
Keira Nighly,2009年

2
我想当您从Greasemonkey中创建一个新脚本时,该脚本会立即安装。该脚本是默认的空文件,这意味着您错过了需要任何外部脚本的机会。
罗伯·肯尼迪

因此,无法在正在制作的新脚本上使用@require吗?:/
quano

4
很简单,@ Quano。制作一个新的.user.js文件,在其中编写脚本,然后将其拖到浏览器中进行安装。仅在您从Greasemonkey的UI中创建脚本时,才存在要求使用外部脚本的限制,但不要求必须使用Greasemonkey创建脚本文件。您可以在脚本安装后对其进行编辑,但是如果要添加新@require指令,则需要卸载并重新安装脚本才能使其生效。
罗伯·肯尼迪

81

如果要在已经包含jQuery的网站上使用jQuery,这是可行的方法(受BrunoLM的启发):

var $ = unsafeWindow.jQuery;

我知道这不是问题的初衷,但是它正变得越来越普遍,您没有明确排除这种情况。;)



可以使用Firefox的脚本!
Gqqnbig

2
将要测试您是否还没有这样的用户:if(typeof $ == 'undefined'){ var $ = unsafeWindow.jQuery; } 在Chrome中,Jquery网站已经可用。
Jonathon

嗯 使用此方法时,我收到了非常奇怪的错误。这alert($('.submit_entry').length);既可以排除错误,也可以同时发送适当的警报。
Jonathon

21

在Greasemonkey脚本中包含整个jQuery绝对没有错。只需获取源代码,并将其放在用户脚本的顶部即可。无需制作脚本标签,因为您已经在执行JavaScript!

用户仍然只下载一次脚本,因此脚本的大小不是什么大问题。此外,如果您希望Greasemonkey脚本在非GM环境中运行(例如Opera的GM风格的用户脚本或Safari上的Greasekit),则不使用GM独特的构造(例如@require)将很有帮助。


7

Rob的解决方案是正确的- @require与jQuery库一起使用,并确保重新安装脚本,以便对指令进行处理。

我认为值得补充的一件事是,一旦将其包含在脚本中,就可以正常使用jQuery,但AJAX方法除外。默认情况下,jQuery查找XMLHttpRequest,它在Greasemonkey上下文中不存在。我写了一个解决方法,其中为GM_xmlhttpRequest(XHR的Greasemonkey版本)创建包装,并使用jQuery ajaxSetup()将包装的版本指定为默认版本。完成此操作后,您可以照常使用$.get$.post

您可能还会遇到jQuery的问题,$.getJSON因为它使用<script>标签加载JSONP 。这会导致错误,因为jQuery在Greasemonkey窗口的范围内定义了回调函数,并且加载的脚本在主窗口的范围内寻找了回调。最好的选择是$.get改用并使用解析结果JSON.parse()


4

您可以使用Greasemonkey中的“新用户脚本”来创建新脚本,但必须在gm_scripts文件夹中编辑config.xml文件。

您的config.xml文件应具有类似的语法:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test">
        <Include>http://*</Include>
        <Require filename="jquery.js"/>
</Script>

注意<Require>标签。

在脚本中,您可以使用直接jQuery语法。确保在Greasemonkey标头中有require标签。这是一个Hello World示例:

// ==UserScript==
// @name           Test jQuery
// @namespace      http://www.example.com/jQueryPlay/
// @description    Just a test
// @include        http://*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {  
        alert("Hello world!");
});

请记住,在修改config.xml之后,您必须重新启动浏览器以使Greasemonkey再次重新加载设置。

还要注意,您需要将jquery.js文件复制到脚本目录文件夹中才能使其工作。我对此进行了测试,并且只有在您实际手动将文件复制到那里的情况下,它才有效。

快乐的jQuerying!


4

更新:正如下面的评论所述,此答案已过时。

正如其他所有人所说,@require仅在脚本安装后运行。但是,您还应该注意,当前的jQuery 1.4。*不适用于油脂猴子。您可以在此处查看详细信息:http : //forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

您将不得不使用jQuery 1.3.2,直到一切改变。


3
从GM 0.9或更高版本开始,此答案已过时。
布罗克·亚当斯

3
@Brock:为什么?您能为我们解释一下吗?
Trevor Sullivan 2012年



1

Component unavailable如果直接导入jQuery脚本,您可能会得到。

也许这就是@Conley在说的...

您可以使用

@require        http://userscripts.org/scripts/source/85365.user.js

这是可以在Greasemonkey上运行的修改版本,然后获取jQuery对象

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");

我意识到这是5岁,但我只是想知道:像在页面上已经定义的那样获取jQuery对象,将其称为unsafeWindow.jQuery,这不是错误的吗?
jj_ 2015年

0

@require不是第一次安装脚本时,只处理!根据我的观察,它是在第一次执行时处理的!因此,您可以通过Greasemonkey的命令安装脚本以创建全新的脚本。您唯一需要注意的是,添加@require部件之前不会触发页面重新加载。(并保存新脚本...)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.