Запускать сценарий Greasemonkey на одной странице несколько раз?

Я абсолютно новичок в Greasemonkey, javascript, на самом деле все вещи пользовательского интерфейса.

Требование: Userscript запускается GS один раз после загрузки страницы. Однако мне нужно, чтобы один и тот же скрипт запускался несколько раз без обновления

Вариант использования: Например, поиск на Amazon.com происходит с использованием Ajax. Мне нужно встроить пользовательский элемент в результаты поиска.

Мне нужно добавить свой контент в раздел search-results-div вместе с результатами каждый раз, когда поиск происходит на той же странице (обновление страницы не выполняется)

Мой текущий скрипт работает только с обновлением страницы.

Надеюсь, выше объяснение понятно. Пожалуйста помоги.

2 ответа

Решение

Самый простой и надежный способ - использовать утилиту waitForKeyElements().

Вот полный скрипт, который использует jQuery и waitForKeyElements изменить результаты поиска Amazon:

// ==UserScript==
// @name     _Amazon Search, alter results
// @include  http://www.amazon.com/s/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

function addCustomSearchResult (jNode) {
    //***** YOUR CODE HERE *****
    jNode.prepend (
        '<div id="result_000" class="fstRow">Buy my stuff, instead!</div>'
    );
}

waitForKeyElements ("#atfResults", addCustomSearchResult);

Вы можете использовать DOMNodeInserted событие для вызова вашего обратного вызова, например:

document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false);

Обратите внимание, что событие будет вызвано любым изменением в структуре страницы, поэтому вам нужно убедиться, что вы нацелены на правильное изменение.

Другие вопросы по тегам