Greasemonkey @require не работает в Chrome

Я пытаюсь добавить jQuery с помощью метода @require / @include Greasemonkey, но он не работает. Появляется следующая ошибка:

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();

Как я могу это исправить?


person Matteo Mosconi    schedule 20.03.2012    source источник


Ответы (2)


@ic не является допустимым метаправилом, поэтому его игнорируют.
Используйте @require, если вы хотите загрузить jQuery в свой пользовательский скрипт.

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

РЕДАКТИРОВАТЬ: в комментариях вы сказали, что используете Chrome. Chrome не поддерживает правило @require. Смотрите также:

Если вам нужна полная поддержка Greasemonkey в Chrome, используйте 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 $)

На основе мета-блока создается файл 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"
}
person Rob W    schedule 20.03.2012
comment
Извините, это ошибка, с которой я столкнулся при вставке. я использовал @include, извините! - person Matteo Mosconi; 20.03.2012
comment
@MatteoMosconi Вы не должны использовать @include, но @require для загрузки внешних файлов. - person Rob W; 20.03.2012
comment
извините, даже пытаясь использовать ваш мета-блок, я не вижу изменений: '( - person Matteo Mosconi; 20.03.2012
comment
благодаря. Я использую последнюю версию Chrome: на ней уже должна быть greasemonkey. После того, как я установил ваше расширение (и удалил шахту), я вижу несколько неопределенных предупреждений на каждом сайте. Но, к сожалению, я все еще вижу Uncaught ReferenceError: $ не определено (анонимная функция) (анонимная функция). - Что мне делать, чтобы решить эту проблему? Спасибо .. - person Matteo Mosconi; 21.03.2012
comment
Что плохого? В Chrome теперь встроена greasmonkey! - person Matteo Mosconi; 21.03.2012
comment
@MatteoMosconi Это неправильно. См. Мой обновленный ответ для получения более подробной информации. - person Rob W; 21.03.2012

Chrome не поддерживает скрипты greasemonkey, скорее, определенные команды greasemonkey (@require, GM_ и т. д.)

чтобы все заработало, установите Chrome-аддон "TamperMonkey"

person RozzA    schedule 01.04.2012