2012-06-25 3 views
26

Я совершенно новичок в Greasemonkey, javascript, на самом деле все материалы пользовательского интерфейса.Запустить сценарий Greasemonkey на той же странице, несколько раз?

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

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

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

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

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

ответ

37

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

Вот полный сценарий, который использует 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); 
+2

Спасибо МНОГО !!!!! Хотя у меня есть некоторый опыт программирования, этот скрипт пользовательского интерфейса вызывает беспокойство (раздражает) меня. Ваш код работает именно так, как я хотел. Я бы настроил его для удовлетворения других требований. Еще раз спасибо. – Firefox

+0

Добро пожаловать; рад помочь! –

4

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

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

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

+0

Спасибо большое, я буду проверять его. Можно ли отслеживать событие «click», связанное с кнопкой поиска? – Firefox

+1

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

+0

Не знал, что это устарело, спасибо. – ncreep

Смежные вопросы