243

我试着把这条线,但它不工作:

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

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

--

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

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

4

10 回答 10

201

也许您没有足够新的 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 的行为已经改变(以解决一个切线相关的问题),现在它在每次编辑后加载所需的脚本;不再需要重新安装脚本。

于 2009-05-13T16:50:52.977 回答
89

如果您想在已经包含 jQuery 的网站上使用 jQuery,那么可以这样做(受 BrunoLM 启发):

var $ = unsafeWindow.jQuery;

我知道这不是问题的初衷,但它正日益成为一种常见情况,您没有明确排除这种情况。;)

于 2010-11-23T22:51:14.240 回答
21

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

无论如何,用户只下载一次脚本,所以脚本的大小不是一个大问题。此外,如果您希望您的 Greasemonkey 脚本在非 GM 环境中工作(例如 Opera 的 GM-esque 用户脚本,或 Safari 上的 Greasekit),那么不使用 GM-unique 构造(例如 @require)会有所帮助。

于 2009-05-13T17:04:14.920 回答
7

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

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

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

于 2010-03-24T00:00:17.167 回答
4

如果您使用的是 chrome,则必须选择替代方案,因为 Chromium 不支持@require.

来源:Chromium 项目 - 用户脚本

有关如何在 Google Chrome 的 Greasemonkey 脚本中使用 jQuery 的更多详细信息和替代方法?

于 2014-05-30T06:02:06.233 回答
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!

于 2009-12-23T12:02:14.987 回答
4

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

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

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

于 2010-04-11T17:32:18.713 回答
2

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

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

您可以使用

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

这是在 Greasemonkey 上工作的修改版本,然后获取 jQuery 对象

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
于 2010-09-04T01:29:56.480 回答
2

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

于 2012-07-13T18:43:39.747 回答
0

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

于 2013-02-14T17:19:50.060 回答