Использование jquery и greasemonkey для получения нескольких страниц - PullRequest
0 голосов
/ 28 февраля 2010

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

Для простоты в моем примере кода предполагается, что jquery уже загружен.

В основном код работает, однако, если есть многократные запросы, страница просто зависает, то есть - если я изменяю условие на intIndex <3 или более. </p>

    $('.lastposter').each(
        function (intIndex){
            if(intIndex < 2){
                var threadlink = $('a', this)[1].href;
                var thread = $.ajax({ type: "GET", url: threadlink, async: false }).responseText;

                $(this.parentNode.parentNode).attr('title', $('.post', thread).text());

            }
        }
    );

Итак, мой загруженный вопрос: есть ли лучший способ сделать это? Я думал, что мне просто нужна какая-то пауза в цикле, или, может быть, изменить ее так, чтобы запрос ajax происходил (например) при событии hover строки. Кроме того, результаты будут кэшироваться? Если нет, есть ли способ сделать их кэшированными или я должен просто оставить это на сервер? Я думал сохранить их как переменную GM (GM_setValue), но, возможно, это станет грязным и / или дырявым.

Если у вас есть идеи, предложения, примеры и т. Д., Я буду рад услышать о них.

1 Ответ

1 голос
/ 28 февраля 2010

Проблема с вашим кодом в том, что он запрашивает не -синхронный запрос. В результате функция $ .ajax ожидает ответа от сервера.

Для асинхронного запроса вам нужно определить функцию обратного вызова, например:

$.get(threadlink, function(thread) {  
    $(this.parentNode.parentNode).attr('title', $('.post', thread).text());  
});

Для обработки ссылок одна за другой вместо нескольких одновременных запросов вы можете захватывать узлы в массиве (makeArray) и pop по одному с определенной скоростью (setTimeout/setInterval). Обратите внимание, что у greasemonkey есть некоторые подводные камни здесь ...

Результаты будут кэшироваться в основном как любая другая страница. IE не получит его до истечения срока действия. Возможно, вам придется изменить заголовки ответа кэша / истечения срока действия сервера.

Посмотрите на это, оно звучит похоже (но не использует jquery)

http://userscripts.org/scripts/show/19613

...