Вопрос по javascript – Как загрузить скрипт greasemonkey после AJAX-запроса

2

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

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

Ваш Ответ

2   ответа
1

Спасибо, Говард. Это был путь в правильном направлении.

Довольно трудно найти подходящую точку входа для взлома функции в минимизированном скрипте. Но я обнаружил, что есть сценарий в твиттере. Он вызывает window.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.

Похожие вопросы