如何在Greasemonkey中使用jQuery?

时间:2009-05-13 16:37:45

标签: jquery greasemonkey

我尝试过这一行,但它不起作用:

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

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

-

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

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

10 个答案:

答案 0 :(得分:181)

也许你没有最近版本的Greasemonkey。版本0.8增加了@require

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

如果你没有0.8,那么请使用Joan Piedra为manually adding a script element to the page描述的技术。

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

从0.9开始,Greasemonkey的行为发生了变化(地址为a tangentially related issue),因此它现在可以在每次编辑后加载所需的脚本;不再需要重新安装脚本。

答案 1 :(得分:77)

如果你想在已经包含jQuery的网站上使用jQuery,这就是要走的路(灵感来自BrunoLM):

var $ = unsafeWindow.jQuery;

我知道这不是问题的原始意图,但它越来越成为一种常见的情况,并且您没有明确排除这种情况。 ;)

答案 2 :(得分:21)

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

用户只能一次下载脚本,因此脚本的大小不是一个大问题。此外,如果您希望Greasemonkey脚本在非GM环境中工作(例如Opera的GM-esque用户脚本或Safari上的Greasekit),那么它将有助于不使用GM独有的构造,例如@require。 / p>

答案 3 :(得分:7)

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

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

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

答案 4 :(得分: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。

答案 5 :(得分:4)

如果您使用的是Chrome,则必须选择替代品,因为Chromium不支持@require

来源:The Chromium Project - User scripts

How can I use jQuery in Greasemonkey scripts in Google Chrome?

的更多详情和替代方案

答案 6 :(得分:3)

您可以使用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!

答案 7 :(得分:2)

如果你想使用jQuery取消绑定网页上的事件,@ require meta不起作用,你必须使用网页中包含的jQuery库,然后使用var $ = unsafeWindow.jQuery; How do I unbind jquery event handlers in greasemonkey?在Greasemonkey中获取它

答案 8 :(得分:1)

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

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

您可以使用

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

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

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

答案 9 :(得分:0)

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