Greasemonkey @require在Chrome中不起作用

Mat*_*oni 3 greasemonkey google-chrome userscripts

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

Uncaught ReferenceError: $ is not defined (repeated 10 times)
Run Code Online (Sandbox Code Playgroud)

这是我的示例代码:

// ==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();
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

Rob*_*b W 10

@ic不是一个有效的元规则,所以它被忽略了.
使用@require,如果要加载的jQuery在用户脚本.

// ==UserScript==
// @name       Foo
// @namespace  Bar
// @include    *
// @require    http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==
Run Code Online (Sandbox Code Playgroud)

编辑:在评论中,你说你正在使用Chrome.Chrome并没有支持该@require规则.也可以看看:

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

清除Chrome中用户脚本的混淆

Chrome本身支持GreaseMonkey.无论何时.user.js加载文件,它都会以内容脚本的形式转换为Chrome扩展程序.

有关Chrome中用户脚本的详细信息,请参阅此文档.

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

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

一个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"
}
Run Code Online (Sandbox Code Playgroud)

  • @MatteoMosconi你不应该使用`@include`,而是**`@ require`**来加载外部. (3认同)