Почему $ undefined, когда я пытаюсь использовать jQuery в GreaseMonkey? - PullRequest
7 голосов
/ 24 марта 2010

Я совершенно новичок в GreaseMonkey, но я пытаюсь сделать небольшой скрипт.

// ==UserScript==
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// ==/UserScript==
(function() {
    $ = unsafeWindow.jQuery;
    alert($); // this gives 'undefined'
}());

Почему предупреждение выдает undefined и как это исправить?

UPDATE

Я пробовал это:

(function(){
  //boilerplate greasemonkey to wait until jQuery is defined...
  function GM_wait()
  {
    alert('ok');
    if(typeof unsafeWindow.jQuery == 'undefined')
      window.setTimeout(GM_wait,100);
    else
      unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
  }
  GM_wait();

  function letsJQuery($)
  {
    alert($);
  }
})(); 

но это дало мне бесконечный цикл предупреждений. Похоже, jQuery вообще не загружается.

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

Редактировать : Это может быть это ?

Возможно, у вас недостаточно свежая версия Greasemonkey. Это была версия 0.8, которая добавила @require. Также помните, что @ require обрабатывается только при первой установке скрипта. Если вы измените список необходимых скриптов, вам нужно удалить его и переустановить ; Greasemonkey загружает требуемый скрипт один раз при установке и затем использует кэшированную копию.


Сценарий GM может выполняться до того, как страница будет готова (то есть до инициализации jQuery). Я использую этот код в своих скриптах Greasemonkey, чтобы использовать jQuery:

(function(){
  //boilerplate greasemonkey to wait until jQuery is defined...
  function GM_wait()
  {
    if(typeof unsafeWindow.jQuery == 'undefined')
      window.setTimeout(GM_wait,100);
    else
      unsafeWindow.jQuery(function() { letsJQuery(unsafeWindow.jQuery); });
  }
  GM_wait();

  function letsJQuery($)
  {
    //whatever
  }
})();
1 голос
/ 19 января 2016

новее greasemonkey нужно добавить // @grant none для использования // @require

1 голос
/ 20 апреля 2010

@require предназначен для одноразовой загрузки ресурса.
При первой установке ресурс загружается и помещается в папку скрипта. Затем требуемый сценарий выполняется до сценария пользователя.
Он запускается в той же области, что и пользовательский скрипт, а не в unsafeWindow.
Если вы пишете сценарий самостоятельно, он не получит ресурс, пока вы его не установите (или не отредактируете XML-файлы GM, чтобы распознать ресурс и поместить файл в каталог сценария, в каталог профиля пользователя firefox).

Если вы выберете (более простой) метод удаления \ переустановки, не забудьте сделать резервную копию вашего пользовательского скрипта ...:)

...