Использование плагинов jQuery внутри скриптов Greasemonkey - PullRequest
1 голос
/ 09 августа 2009

Я пишу простой скрипт GreaseMonkey, в который встроен плагин jQuery с именем hoverIntent. (Я встраиваю его, а не размещаю, потому что это очень маленький плагин.)

Моя проблема: после того, как плагин присоединяет свой обработчик событий к объекту DOM, событие вызывает сообщение об ошибке, которое гласит: «jQuery не определен».

Это проблема объема? Вот весь мой сценарий:

   if(unsafeWindow.console){
       var GM_log = unsafeWindow.console.log;
    }


    (function($){
            //HoverIntent
            $.fn.hoverIntent=function(f,g){...}; 
            //Removed the plugin code. You can see it in the link at the bottom 
            //of the post.



    //DOM is ready
    //Fetch all the rows with arrows
    $('.arrow')
        .each(function(){
            $(this).hoverIntent(mouseOver,mouseOut);            
        });

    //mouseOver
    function mouseOver(){
        //THIS IS WHERE THE ERROR HAPPENS
        $(this).click();
    }

    //mouseOut
    function mouseOut(){ //nothing here.
    }

    })(unsafeWindow.jQuery);

Он прекрасно работает, когда я копирую, вставляю его, удаляю все специфические для GM теги и запускаю его из консоли. И это плагин, который я встраиваю .

1 Ответ

1 голос
/ 09 августа 2009

Запускается ли скрипт greasemonkey до или после onDOMLoaded? Возможно, вам придется отложить выполнение сценария до тех пор, пока сценарий jQuery не будет загружен родительским окном и загружен ...

Редактировать за комментарий:

Я не вижу элемент document.ready в вашем коде выше, хотя я вижу ваш комментарий об этом ... Однако, ваш комментарий слишком поздний в сценарии, чтобы его можно было использовать ... Это может объяснить :

(function($){ /* some code here */ })(unsafeWindow.jQuery)

Независимо от того, что вы положили в раздел /* some code here */, если эта строка будет выполнена до определения unsafeWindow.jQuery, вы все равно будете вызывать функцию для неопределенного объекта ...

Чтение вики GreaseSpot в unsafeWindow предлагает альтернативный подход:

var script = document.createElement("script");
script.type = "application/javascript";
script.innerHTML = "(function($){
        //HoverIntent
        $.fn.hoverIntent=function(f,g){...}; 
        //Removed the plugin code. You can see it in the link at the bottom 
        //of the post.



    //DOM is ready
    //Fetch all the rows with arrows
    $('.arrow')
        .each(function(){
                $(this).hoverIntent(mouseOver,mouseOut);                
        });

    //mouseOver
    function mouseOver(){
        //THIS IS WHERE THE ERROR HAPPENS
        $(this).click();
    }

    //mouseOut
    function mouseOut(){ //nothing here.
    }

})(jQuery);";

document.body.appendChild(script);

Редактировать: ни один из моих ответов не обязательно имеет смысл, поскольку вы используете объект $ за несколько строк до того, как проблема возникнет ...: -S странно.

...