Использование бесконечной прокрутки Tumblr с другим скриптом - PullRequest
5 голосов
/ 01 мая 2011

Я использую код JavaScript Коди Шермана здесь: http://codysherman.com/tools/infinite-scrolling/code

Я также использую простой скрипт jquery для динамического изменения фоновых изображений элементов div, содержащих сообщения tumblr.

Код jquery работает нормально, но мне нужен способ для повторного вызова функции, когда скрипт бесконечной прокрутки обновляется новыми сообщениями. Я думаю, что они разговаривают друг с другом.

Вы можете увидеть страницу здесь: http://hypergeography.tumblr.com/ (Он еще не использует бесконечную прокрутку. Но у него есть скрипт, который меняет фоновые изображения.)

Любая помощь будет оценена.

1 Ответ

4 голосов
/ 01 мая 2011

Если вы чувствуете себя достаточно безопасно, вы определенно можете войти в этот код (он совсем не длинный) и добавить некоторую логику в раздел onreadystatechange. Это событие вызывается после завершения вызова Ajax. Если вы подключитесь к нему, вы можете легко добавить что-то, чтобы поговорить с вашим кодом.

Другой способ - перехватить XMLHttpRequest, чтобы при вызове метода send() вы подключали собственный прослушиватель событий, который отслеживает этот запрос на событие load. Как только запрос сделан, вы можете вызывать ваши пользовательские функции. Это можно сделать так:

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    this.addEventListener('load',function(){
        //CALL YOUR CODE HERE
    },false);
    this.originalSend(s);
}

Или вместо этого вы можете взломать функцию onreadystatechange, чтобы добавить свою собственную логику:

XMLHttpRequest.prototype.originalSend=XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send=function(s){
    if(this.onreadystatechange){
        var oldORSC=this.onreadystatechange;    
    }
    this.onreadystatechange=function(){
        if (this.readyState==4 && this.status==200){ //a successful request
                //CALL YOUR CODE HERE
        }
        if(oldORSC){
            oldORSC();
        }
    }
    this.originalSend(s);
}

Конечно, если вы хотите поддерживать IE, вам придется делать аналогичные вещи с ActiveXObject, который они используют для AJAX. Но я им не пользуюсь, поэтому не могу привести примеры.

РЕДАКТИРОВАТЬ: это предполагает, что ваша страница делает звонки только для этой цели. Если у вас есть другие вызовы AJAX, вам нужно будет добавить логику, чтобы определить, какой вызов используется. Для этого вы можете подключиться к методу open() и проверить URL-адрес или параметры или любую другую конкретную информацию, которая поможет вам определить, куда идет вызов, а затем соответствующим образом изменить запрос.

ТАКЖЕ: убедитесь, что эти угонщики называются ПЕРВЫМИ, прежде чем любой другой javascript.

...