Почему $ не определен, когда я пытаюсь использовать jQuery в GreaseMonkey?

Я полностью плохо знаком с GreaseMonkey, но я пытаюсь сделать немного сценария.

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

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

ОБНОВЛЕНИЕ

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

(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 не становится загруженным вообще.

8
задан Natrium 24 March 2010 в 13:12
поделиться

2 ответа

Edit: Может ли это быть это?

Возможно, у вас нет достаточно последней версии 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
  }
})();
6
ответ дан 5 December 2019 в 20:15
поделиться

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

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

1
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: