2009-07-06 2 views
2

У меня есть простой скрипт greasemonkey, который делает некоторые простые манипуляции с dom. Сценарий greasemonkey загружается после загрузки DOM, и это нормально, так что он работает на начальной странице. Но на этом сайте (это твиттер ;-)) части страницы загружаются после нажатия xmlhttprequest, и эта часть не обрабатывается моим greasemonkeyscript.Как загрузить скрипт greasemonkey после AJAX-Request

Есть ли возможность запустить сценарий снова после загрузки xmlhttprequest или после изменения DOM по запросу?

ответ

1

Thanks Howard. Это был путь в правильном направлении.

Трудно найти правильную точку входа, чтобы захватить функцию на минифинированном скрипте. Но я обнаружил, что в twitter-скрипте есть трюк. Он вызывает call.onPageChange после запроса Ajax. (Интересно, является ли это общей передовой практикой в ​​javascript, а если и другие делают это?) Я нашел код на http://userscripts.org/scripts/review/47998, который использует эту возможность для присоединения событий.

 if (typeof unsafeWindow.onPageChange === 'function') { 
     var _onPageChange = unsafeWindow.onPageChange; 
     unsafeWindow.onPageChange = function(){ 
      _onPageChange(); 
      filter(); 
     }; 
    } else { 
     unsafeWindow.onPageChange = filter; 
    } 
3

Мощная техника при использовании Greasemonkey - «уклонение» от существующих функций JavaScript. Если страница, которую вы изменяете имеет функцию под названием processAjaxResponse, которая вызывается, когда для обработки XmlHttpRequest ответа, вы можете сделать следующее в вашем Greasemonkey скрипта:

var originalProcessAjaxResponse; 

function myNewProcessAjaxResponse() { 
    /* Manipulate DOM if you need to, and then... */ 
    originalProcessAjaxResponse(); 
} 

function hijack() { 
    var originalProcessAjaxResponse = processAjaxResponse; 
    processAjaxResponse = myNewProcessAjaxResponse(); 
} 

Это позволяет придать свою собственную функциональность, когда AJAX происходит ответ.

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