如何在Greasemonkey中使用jQuery?

Kei*_*hly 231 jquery greasemonkey

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

// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
Run Code Online (Sandbox Code Playgroud)

jQuery根本不适用于Greasemonkey.还有其他方法在Greasemonkey中使用jQuery吗?

-

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

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

Rob*_*edy 186

也许你没有最近版本的Greasemonkey.它补充了0.8版本@require.

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js 
Run Code Online (Sandbox Code Playgroud)

如果你没有0.8,那么使用Joan Piedra描述的手动向script页面添加元素的技术.

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

从0.9开始,Greasemonkey的行为发生了变化(以解决与切向相关的问题),以便它现在在每次编辑后加载所需的脚本; 不再需要重新安装脚本.

  • 这很简单,@ Quano.创建一个新的.user.js文件,在其中编写脚本,然后将其拖到浏览器上进行安装.只有在您从Greasemonkey的UI中创建*脚本时,才会出现对要求外部脚本的限制,但是并不要求您必须使用Greasemonkey来创建脚本文件.您可以在安装后编辑脚本,但是如果要添加新的`@ require`指令,则需要卸载并重新安装脚本才能使脚本生效. (4认同)
  • 我想,当你从Greasemonkey中创建一个新脚本时,脚本会立即安装.该脚本是默认的空文件,这意味着您错过了需要任何外部脚本的机会. (2认同)

Hen*_*ger 79

如果你想在已经包含它的网站上使用jQuery,这就是要走的路(受BrunoLM的启发):

var $ = unsafeWindow.jQuery;
Run Code Online (Sandbox Code Playgroud)

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

  • Chrome中不支持 - http://www.chromium.org/developers/design-documents/user-scripts (4认同)
  • 将要测试是否还没有这样:`if(typeof $ =='undefined'){var $ = unsafeWindow.jQuery; }`在Chrome中,已经可以使用Jquery网站。 (2认同)

Dan*_*Lew 21

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

用户只能一次下载脚本,因此脚本的大小不是一个大问题.另外,如果你想你的Greasemonkey脚本在非转基因的环境(如Opera的GM式的用户脚本,或Greasekit在Safari)工作,这将帮助不使用GM-独特的构造,如@require.


Rya*_*yan 7

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

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

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