Greasemonkey с jQuery, как написать скрипт greasemonkey для изменения элементов DOM страницы? - PullRequest
0 голосов
/ 02 сентября 2011

На вики-странице greasemonkey приведен пример использования jQuery с greasemonkey.Код приведен ниже, а расположение страницы: http://wiki.greasespot.net/Third-Party_Libraries#jQuery

// ==UserScript==
// @name          jQuery Example
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

// Append some text to the element with id someText using the jQuery library.
$("#someText").append(" more text.");

В этом примере сценария непосредственно изменяется DOM.Нужно ли мне окружать код символом jQuery function следующим образом:

// ==UserScript==
// @name          jQuery Example
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

// Append some text to the element with id someText using the jQuery library.
jQuery(function(){
    $("#someText").append(" more text.");   
})

Я задаю этот вопрос, потому что мой код greasemonkey не выполняется каждый раз, когда страница обновляется.Есть идеи по этому вопросу?Спасибо.

1 Ответ

3 голосов
/ 02 сентября 2011

Нет, нет смысла заключать код скрипта в вызов jQuery() или использовать $(document).ready ().

Greasemonkey автоматически запускается как после события DOMContentLoaded (так же, как обертка jQuery или событие ready), так и после загрузки версии jQuery от GM.

Также обратите внимание, что эта вики-страница устарела. Сейчас GM отлично работает с jQuery 1.6.2.

Вы не показывали соответствующий код и ссылку на целевую страницу , но наиболее вероятные причины, по которым «код Greasemonkey не выполняется каждый раз при обновлении страницы» "являются:

  1. В скрипте GM есть ошибка.

  2. Целевой контент загружается отдельно через AJAX.
    Вы можете использовать код в этом шаблоне, чтобы обойти это:

    //--- This handles both page-load delays, and AJAX changes.
    setInterval (function() { checkForTweetbox (); }, 500);
    
    function checkForTweetbox () {
        var tweetbox = document.querySelector ('div.tweet-box textarea');
        if (tweetbox) {
            if (! tweetbox.weHaveProcessed) {
                tweetbox.weHaveProcessed    = true;
                alert ('New tweet-box found!');
            }
        }
    }
    
...