Greasemonkey @require在Chrome中不起作用

时间:2012-03-20 17:02:49

标签: google-chrome greasemonkey userscripts

我正在尝试使用Greasemonkey的@require / @include方法添加jQuery,但它不起作用。出现以下错误:

Uncaught ReferenceError: $ is not defined (repeated 10 times)

这是我的示例代码:

// ==UserScript==
// @description Bored, really bored.
// @name MatteoSample
// @namespace MatteoSampleNamespace
// @include *
// @include       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

$(document).slideUp();

我该如何解决?

2 个答案:

答案 0 :(得分:10)

@ic不是有效的元规则,因此被忽略 如果要在用户脚本中加载jQuery,请使用@require

// ==UserScript==
// @name       Foo
// @namespace  Bar
// @include    *
// @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

编辑:在评论中,您说您使用的是 Chrome 。 Chrome 支持@require规则。另见:

如果您想在Chrome中获得完整的Greasemonkey支持,请使用Tampermonkey

清除Chrome中用户脚本的混淆

Chrome 原生支持GreaseMonkey。每当加载.user.js文件时,它都会以Content script的形式转换为Chrome扩展程序。

有关Chrome中用户脚本的详细信息,请参阅this documentation

用户脚本实际上已复制到扩展程序的目录中:

// ==UserScript==
// @name       Foo
// @namespace  Bar
// @include    *
// @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==
alert(typeof $)

基于元块创建manifest.json文件。当用户脚本包含@include规则时,其matches规则将包含https://*/*http://*/*,因为@include规则过于宽松。

生成的manifest.json的内容如下:

{
   "content_scripts": [ {
      "exclude_globs": [  ],
      "include_globs": [ "*" ],
      "js": [ "script.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_idle"
   } ],
   "converted_from_user_script": true,
   "description": "",
   "key": "+.... some key ...=",
   "name": "Foo",
   "version": "1.0"
}

答案 1 :(得分:1)

chrome不支持greasemonkey脚本,而是支持特定的greasemonkey命令 (@require,GM_等)

要使这些东西正常工作,请安装chrome addon“TamperMonkey”