Событие щелчка jQuery не запускается в скрипте Greasemonkey - PullRequest
0 голосов
/ 30 августа 2011

Я добавил изображение на страницу через GM и пытаюсь выполнить событие щелчка, но безрезультатно.

Есть идеи, что мне не хватает?

Разметка страницысодержит:

<img id="kwdHelp" src="myImage />

Фрагмент скрипта Greasemonkey / Tampermonkey ...

function jQueryLoaded(){
    jQuery('#kwdHelp').click(function(){
    alert('clicked show help'); //DOES NOT FIRE
    });

    jQuery(document).bind('DOMNodeInserted', function(event) 
    {
        if (event && event.target && jQuery(event.target).attr("class") == 'aw-ti-resultsPanel-details') 
        {
            if (waitToLoad !== null) 
            {
                window.clearTimeout(waitToLoad);
            }
            waitToLoad = window.setTimeout(SearchDomains, 100);
        }
    });
    setupLoadingImage();
};


function checkIfjQLoaded() {
   //if(typeof unsafeWindow.jQuery == 'undefined') { window.setTimeout(checkIfjQLoaded,100); }
    //else { jQuery = unsafeWindow.jQuery; jQueryLoaded();}
    jQueryLoaded();
};

checkIfjQLoaded();

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Присутствует ли элемент в документе в то время, когда вы пытаетесь привязать к нему событие?

Я обычно совершаю эту ошибку сам.

0 голосов
/ 30 августа 2011

Код в вопросе должен работать (хотя он нуждается в улучшении, см. Ниже), предполагая, что две неопределенные функции действительно находятся где-то в коде.

Ошибка в том, что не в вопросе.

  • Ссылка на целевую страницу.
  • Показать полный неотредактированный код.
  • Какие сообщения об ошибках выдает консоль Firebug?

Избавьтесь от этой checkIfjQLoaded() malarkey.Это устарелая и плохая практика.

Используйте // @require для загрузки jQuery, и скрипт запускается по умолчанию document.ready.

Мало того, что код проще, но он намного быстрее и болееэффективный, так как ему не нужно каждый раз получать jQuery.

Сценарий будет выглядеть так:

// ==UserScript==
// @name     _YOUR_NAME
// @include  http://YOUR_SERVER/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// ==/UserScript==

$('#kwdHelp').click(function(){
    alert('clicked show help'); //DOES NOT FIRE
});

$(document).bind('DOMNodeInserted', function(event) 
{
    if (event && event.target && $(event.target).attr("class") == 'aw-ti-resultsPanel-details') 
    {
        if (waitToLoad !== null) 
        {
            window.clearTimeout(waitToLoad);
        }
        waitToLoad = window.setTimeout(SearchDomains, 100);
    }
});
setupLoadingImage();

function SearchDomains () {
    //...
}

function setupLoadingImage () {
    //...
}


Наконец, если вы хотите использоватьскрипт для Chrome, установите Tampermonkey для достижения наилучших результатов.

...