我如何在Greasemonkey中使用jQuery?
我试图把这一行,但它不工作:
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
jQuery在Greasemonkey中根本不起作用。 有没有其他的方法来在Greasemonkey中使用jQuery?
–
对于所有有同样问题的人,您必须将file upload到greasespot,然后从那里安装。
创build新脚本选项不起作用!
也许你没有最近的版本的Greasemonkey。 它是版本0.8添加@require
。
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
如果你没有0.8,那么使用Joan Piedra描述的技术手动添加一个script
元素到页面 。
在版本0.8和0.9之间, @require
仅在脚本第一次安装时被处理。 如果更改所需脚本的列表,则需要卸载脚本并重新安装; Greasemonkey在安装时下载一次所需的脚本,然后使用一个caching的副本。
从0.9开始,Greasemonkey行为已经发生了变化(解决了切线相关的问题 ),以便在每次编辑之后加载所需的脚本; 重新安装脚本不再是必要的。
如果你想在已经包含它的站点上使用jQuery,那么这是一条路(受BrunoLM启发):
var $ = unsafeWindow.jQuery;
我知道这不是问题的最初意图,但它日益成为一个普遍的情况,你没有明确排除这种情况。 ;)
在Greasemonkey脚本中包含整个jQuery是完全没有问题的。 只要拿到源代码,并把它放在你的用户脚本的顶部。 无需制作脚本标记,因为您已经在执行JavaScript了!
用户只需要下载脚本一次,所以脚本的大小不是一个大问题。 另外,如果您希望Greasemonkey脚本能够在非GM环境中工作(例如Opera的GM-esque用户脚本或Safari上的Greasekit),则不会使用GM特有的结构(如@require)。
Rob的解决scheme是正确的 – 在jQuery库中使用@require
,并确保重新安装脚本,以便处理指令。
有一件事我认为值得补充的是, 除了AJAX方法之外,只要将它包含在脚本中,就可以正常使用jQuery。 默认情况下,jQuery查找XMLHttpRequest,Greasemonkey上下文中不存在。 我写了一个解决方法 ,为GM_xmlhttpRequest(Greasemonkey版本的XHR)创build一个包装,并使用jQuery的ajaxSetup()
来指定您的包装版本作为默认值。 一旦你这样做,你可以像往常一样使用$.get
和$.post
。
您可能也有jQuery的$.getJSON
问题,因为它使用<script>
标签加载JSONP。 这会导致错误,因为jQuery在Greasemonkey窗口的作用域中定义了callback函数,并且加载的脚本在主窗口的范围内查找callback函数。 你最好的select是使用$.get
并用JSON.parse()
parsing结果。
更新 :如下面的评论所说,这个答案已经过时了。
正如其他人所说,@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,直到事情改变。
如果您使用的是Chrome,则必须select其他方法,因为Chromium不支持@require
。
来源: Chromium项目 – 用户脚本
更多细节和select我如何在Google Chrome的Greasemonkey脚本中使用jQuery?
您可以使用Greasemonkey中的新build用户脚本创build一个新脚本,但是您必须编辑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标题中有要求标记。 这是一个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文件复制到您的脚本目录文件夹才能使其工作。 我testing了这一点,它只有在你真的在那里手动复制文件时才有效。
快乐jQuerying!
当你想使用jQuery在网页上解除绑定事件时,@require meta不起作用,你必须使用包含在网页中的jQuery库,然后用var $ = unsafeWindow.jQuery;
获取Greasemonkey var $ = unsafeWindow.jQuery;
jquery事件处理程序如何在greasemonkey中解除绑定?
如果直接导入jQuery脚本,可能会导致Component unavailable
。
也许这就是康纳所说的…
您可以使用
@require http://userscripts.org/scripts/source/85365.user.js
这是在Greasemonkey上工作的修改版本,然后获取jQuery对象
var $ = unsafeWindow.jQuery; $("div").css("display", "none");
@require
不仅在脚本第一次安装的时候被处理! 根据我的观察,它在第一次执行时被处理! 所以你可以通过Greasemonkey的命令安装一个脚本来创build一个全新的脚本。 你唯一需要关心的是,没有页面重新加载触发,因为你添加@require
部分。 (并保存新的脚本…)