Запускать сценарий 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);
Обратите внимание, что событие будет вызвано любым изменением в структуре страницы, поэтому вам нужно убедиться, что вы нацелены на правильное изменение.