如何在Greasemonkey中使用jQuery ?

我试着放这条线,但不管用:

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

jQuery在Greasemonkey中根本不起作用。在Greasemonkey中有其他使用jQuery的方法吗?

--

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

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

128853 次浏览

也许你还没有最新版本的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行为发生了改变(改为处理这是一个切分相关的问题),因此它现在在每次编辑后都会加载所需的脚本;不再需要重新安装脚本。

在Greasemonkey脚本中包含整个jQuery绝对没有错。只需获取源代码,并将其放在用户脚本的顶部。不需要创建脚本标记,因为您已经在执行JavaScript了!

不管怎样,用户只下载一次脚本,所以脚本的大小不是一个大问题。此外,如果你想让你的Greasemonkey脚本在非gm环境中工作(比如Opera的gm风格的用户脚本,或者Safari上的Greasekit),不要使用通用特有的结构,比如@require。

您可以使用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文件复制到你的脚本目录文件夹中,这样才能正常工作。我测试了一下,只有手动复制文件才能正常工作。

jquery快乐!

Rob的解决方案是正确的——使用@require与jQuery库,并确保重新安装你的脚本,以便指令得到处理。

有一件事我认为值得补充的是,一旦你在你的脚本除了AJAX方法中包含了jQuery,你就可以正常使用它了。默认情况下,jQuery寻找XMLHttpRequest,这在Greasemonkey上下文中并不存在。我写过关于一个解决方案的文章,你可以为GM_xmlhttpRequest (XHR的Greasemonkey版本)创建一个包装器,并使用jQuery的ajaxSetup()来指定你的包装版本作为默认值。一旦你这样做了,你可以像往常一样使用$.get$.post

jQuery的$.getJSON可能也有问题,因为它使用<script>标记加载JSONP。这将导致错误,因为jQuery在Greasemonkey窗口的范围内定义回调函数,而加载的脚本在主窗口的范围内查找回调函数。最好的方法是使用$.get,并使用JSON.parse()解析结果。

更新:正如下面的评论所说,这个答案是过时的。

正如其他人所说,@require只在脚本安装完成后才运行。但是,您还应该注意到目前jQuery 1.4。*对油猴不起作用。详情如下: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error < / p >

在事情发生变化之前,您将不得不使用jQuery 1.3.2。

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

也许这就是@康利所说的……

你可以使用

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

这是一个修改版本的工作在Greasemonkey,然后得到jQuery对象

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

如果你想在一个已经包含jQuery的网站上使用jQuery,这是一种方法(灵感来自BrunoLM):

var $ = unsafeWindow.jQuery;

我知道这不是你问这个问题的初衷,但它越来越成为一种常见的情况,而你并没有明确地排除这种情况。;)

当你想用jQuery解除网页上的事件绑定时,@require元不起作用,你必须使用网页中包含的jQuery库,然后用var $ = unsafeWindow.jQuery; 如何在greasemonkey解除绑定jquery事件处理程序?在Greasemonkey中获取它

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

如果你正在使用chrome,你必须选择一个替代品,因为Chromium不支持@require

来源:铬项目-用户脚本

有关我如何使用jQuery在Greasemonkey脚本在谷歌Chrome浏览器?的更多详细信息和替代方法