Greasemonkey @require jQuery не работает "Компонент недоступен" - PullRequest
10 голосов
/ 16 января 2010

Я видел другой вопрос здесь о загрузке jQuery в Greasemonkey. Попробовав этот метод, с этим требованием внутри моих тегов ==UserScript==:

// @require    http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

Я все еще получаю следующее сообщение об ошибке в консоли ошибок Firefox:

Error: Component is not available
Source File: file:///Users/greg/Library/Application%20Support/
       Firefox/Profiles/xo9xhovo.default/gm_scripts/myscript/jquerymin.js
Line: 36

Это останавливает мой код greasemonkey от запуска. Я убедился, что включил @require для jQuery и сохранил свой js-файл перед его установкой, так как необходимые файлы загружаются только при установке.

Код:

// ==UserScript==
// @name           My Script
// @namespace      http://www.google.com
// @description    My test script
// @include        http://www.google.com
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js
// ==/UserScript==

GM_log("Hello");

У меня установлена ​​программа Greasemonkey 0.8.20091209.4 на Firefox 3.5.7 на моем Macbook Pro, Leopard (10.5.8). Я очистил свой кеш (кроме файлов cookie) и отключил все остальные плагины, кроме Flashblock 1.5.11.2, Web Developer 1.1.8 и Adblock Plus 1.1.3.

Мой config.xml с моим установленным скриптом Greasemonkey:

<UserScriptConfig>
<Script filename="myscript.user.js" name="My Script" 
 namespace="http://www.google.com" description="My test script" enabled="true" 
 basedir="myscript">
    <Include>http://www.google.com</Include>
    <Require filename="jquerymin.js"/>
</Script>

Я вижу jquerymin.js в каталоге gm_scripts/myscript/.

Кроме того, обычно ли эта ошибка возникает в консоли при установке сценария Greasemonkey?

Error: not well-formed
Source File: file:///Users/Greg/Documents/myscript.user.js
Line: 1, Column: 1
Source Code:
   // ==UserScript==

Ответы [ 8 ]

7 голосов
/ 03 февраля 2010

Я нашел неидеальный способ использовать его с jQuery 1.4.1 - это, кажется, исправляет это. Это новый браузер, нюхающий , который, кажется, "сломает" его.

JQuery-1.4.1.min.js:

  [old]  36: var o=r.createElement("div");n="on"+n;var m=n in o;
  [new]  36: var o=r.createElement("div");n="on"+n;var m=true;

JQuery-1.4.1.js

  [old] 934: var isSupported = (eventName in el);
  [new] 934: var isSupported = true;
6 голосов
/ 22 марта 2010

Я спотыкался, пытаясь решить эту проблему с GM 0.8 и jquery 1.4.2, и нашел это: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Это выглядит как окончательный ответ на вопрос и как обойти это. Обход у меня сработал.

6 голосов
/ 16 января 2010

Хорошо, так что я посмотрел на это немного глубже. Я использовал ваш скрипт точно, но использовал нашу версию JQuery, чтобы она выглядела так:

// ==UserScript==
// @name           My Script
// @namespace      http://www.google.com
// @description    My test script
// @include        http://www.google.se/*
// @include        http://www.dn.se/*
// @require        http://myserver/jquery-1.3.2.js
// ==/UserScript==

GM_log("Hello");

Это прекрасно работает для меня, я думаю, в JQuery на google api отсутствуют некоторые функции. Поскольку этот код выше, работает просто отлично. Также обратите внимание на /* в конце каждого URL, пожалуйста, включите его.

Попробуйте другой JQuery и измените URL, и он должен правильно работать.

3 голосов
/ 30 апреля 2011

Хорошие новости и обновления всех сообщений:

Вышеуказанный патч позволял запускать версии jQuery до 1.5.2 в скриптах Greasemonkey, но, к счастью, патч больше не требуется, если вы используете текущую версию jQuery 1.5.2.

Я проверил его код и заметил, что код функции eventSupported в jQuery

var eventSupported = function(eventName) { ... }

был обновлен, вследствие чего непатентованный jQuery 1.5.2 теперь работает в Greasemonkey 0.9.2.

2 голосов
/ 11 ноября 2010

Патч для jquery-1.4.3.min.js

[старая] строка 41 u.createElement ( "DIV"), S = "на" + з; вар B = s в v;
[новая] строка 41 u.createElement ( "DIV"), S = "на" + з; вар В = истинно;

0 голосов
/ 09 декабря 2010

Вот уменьшенная версия jQuery 1.4.4 для Greasemonkey:

http://userscripts.org/scripts/show/92329

Надеюсь, это поможет, й

0 голосов
/ 30 января 2010

Не совсем так, похоже, что jQuery 1.4 пытается обнаружить что-то с помощью вызова, который просто не работает в среде greasemonkey. @require обычно работает как надо.

Так что возврат к 1.3.2 действительно помогает, но я бы предпочел найти решение, которое позволит мне использовать 1.4.

Кстати, я использую это, немного отличается:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
0 голосов
/ 16 января 2010

Атрибут @require не работает правильно в Greasemonkey и jQuery ... эта же ошибка может возникать и в FireBug.

Альтернативой является включение jQuery на страницу через Greasemonkey путем создания тега script. Вот как это сделать .

...