Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Фоновая работа JS-скрипта в GreaseMonkey

Ответить
Настройки темы
Фоновая работа JS-скрипта в GreaseMonkey

Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15


Конфигурация

Профиль | Отправить PM | Цитировать


Доброго времени суток, уважаемые.

Пишу скрипт для GreaseMonkey, который собирает некую информацию со страницы, сохраняет её, обновляет страницу, ищет новую информацию, сохраняет её, обновляет страницу и т.д. Все в принципе не сложно. Однако проблема в том, что для того чтобы скрипт работал - страница всегда должна быть открыта. Хочется сделать чтобы скрипт выполнялся в Background'е, не влияя на работу пользователя на этой же страничке или не требуя отдельно открытого окна пока пользователь и так работает под необходимым доменом. Я без понятия как это можно было бы организовать. Если у кого есть идеи - был бы очень признателен. Желательно с простейшими примерами, чтобы я смог не только слизать готовый материал, а понять как это работает.

З.Ы.: с аяксом не знаком, но похоже что в скриптах, в которых подобная технология организована - используется нечто подобное.

Решил подробнее объяснить суть того что я хочу:

Скрипт должен собирать информацию с некоторой странички http://some_domain/some_page.

Пока пользователь и так находится на http://some_domain/ у него появляется небольшое меню с кнопками "Старт" "стоп" "показать инфо". При нажатии на "старт" скрипт начинает работать и раз в "Н"-ое количество минут собирает обновленную информацию с http://some_domain/some_page, причем пока он собирает - это не должно влиять на работу пользователя на http://some_domain/.

Отправлено: 18:30, 22-07-2009

 

Deadooshka


Сообщения: 2491
Благодарности: 674

Профиль | Отправить PM | Цитировать


AJAX + скрипт на стороне сервера. Реализация зависит от инструментов (библиотек) JS которые вы используете, и серверного языка...

Для начала лучше поискать готовые решения...

Отправлено: 19:15, 22-07-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15

Профиль | Отправить PM | Цитировать


скрипт на стороне сервера отпадает. к нему, к серверу, естественно, доступа нет, иначе не было бы смысла для этого писать ГризМанковый скрипт, а можно было бы все функции встроить непосредственно в сам сайт. в том то и дело, что в аналогичных скриптах это как-то организованно без участия сервера в этом процессе.

Отправлено: 19:39, 22-07-2009 | #3


Deadooshka


Сообщения: 2491
Благодарности: 674

Профиль | Отправить PM | Цитировать


System Failure, это скрипт, устанавливамый в браузер?

в общем готовых вариантов полно... http://userscripts.org/scripts/search?q=ajax

цикличность достигается функцией setInterval

фоновая работа - асинхронный XMLHttpRequest, для greasemonkey GM_xmlhttpRequest

Последний раз редактировалось Sham, 22-07-2009 в 20:32.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:14, 22-07-2009 | #4


Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15

Профиль | Отправить PM | Цитировать


спасибо за инфо. выглядит просто - как опробую, отпишу результат

Отправлено: 23:50, 22-07-2009 | #5


Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15

Профиль | Отправить PM | Цитировать


в общем все почти получилось проблема в том, как теперь в полученном в ответе ХТМЛе искать необходимые мне данные? можно создать некий контейнер <div> и присвоить div.innerHTML = responseDetails.responseText; но проблема в том, что добавляя этот div в document.body.appendChild(div); - даже скрывая его отображение через setAttribute("style","display:none"); - скрипты выполняемые внутри этого div вызывают ошибки, негативно влияющие на работу странички.

Отправлено: 00:55, 24-07-2009 | #6


Deadooshka


Сообщения: 2491
Благодарности: 674

Профиль | Отправить PM | Цитировать


Цитата System Failure:
div.innerHTML = responseDetails.responseText; »
ответ содержит страницу целиком, поэтому его в DOM нельзя встраивать, нужно ответ предварительно очистить от ненужных тегов (head с содержимым, body, script, iframe и тд), либо вытащить необходимые теги. Все это с помощью регулярных выражений в replace делается.
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:24, 24-07-2009 | #7


Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата Sham:
Все это с помощью регулярных выражений »
Никогда с регулярными выражениями до этого не работал... По всей видимости крайне удобная штуковина. Пытался разобраться - сам тэг удалить не проблема, но как удалить информацию находящуюся между открывающим и закрывающим тэгом? Лучше не давать мне готовый результат, а просто направить в нужное русло. Я думал что это лучше всего сделать через lastIndex открывающего и lastIndex закрывающего тэга. И затем все что находится между этими индексами стереть...

Отправлено: 14:17, 24-07-2009 | #8


Deadooshka


Сообщения: 2491
Благодарности: 674

Профиль | Отправить PM | Цитировать


чтобы вытащить содержимое тега body можно сделать так

Код: Выделить весь код
var bodytext_arr = responseDetails.responseText.match(/<body[^>]*>([\s\S]*?)<\/body>/i);

var bodytext = (bodytext_arr) ? bodytext_arr[1] : 'В страничке нет тега body';

div.innerHTML = bodytext;
для удаления тега с содержимым можно использовать примерно такое же регулярное выражение в replace...

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

Отправлено: 22:02, 24-07-2009 | #9


Аватара для System Failure

Старожил


Сообщения: 175
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата Sham:
(/<body[^>]*>([\s\S]*?)<\/body>/i) »
можно, пожалуйста, если это не составит большого труда, пояснить синтаксис этого выражения?
я его понял так:

/<body - начало тэга, все понятно.
[^>] исключаем из искомого символ > - зачем?
*> - повторение неких предшествующих элементов ноль или более раз, затем символ ">" (тоже не совсем понятно зачем вначале исключать, потом опять включать символ ">")
([\s\S]*?) - набор любых символов неограниченое количество раз (зачем "?", почему не достаточно одной "*" и для чего заключать всё это в круглые скобки?)
<\/body>/i - ищем закрывающий тэг, и чтобы "/" воспринимался литерально - используется перед ним "\". i - для не зависимости от регистра.

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

Добавлено:
Просмотрев как работает этот код, теперь кажется понял зачем круглые скобки... Таким образом для вывода сохраняются только данные, попадающие под "[\s\S]*?", тогда как сами тэги исключаются.

Отправлено: 00:26, 25-07-2009 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Фоновая работа JS-скрипта в GreaseMonkey

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Не сохраняется фоновая картинка рабочего стола lilak Microsoft Windows 2000/XP 10 01-08-2009 18:21
Интерфейс - Фоновая картинка папки d_u Microsoft Windows Vista 3 24-02-2009 18:33
Службы - Проблема: прекращена работа Фоновая интелектуальная служба передачи (BITS) kamalm902 Microsoft Windows Vista 3 02-02-2009 22:21
фоновая закачка bk99 Программное обеспечение Windows 11 24-12-2004 15:36
Фоновая картинка Dimson Вебмастеру 5 09-04-2004 18:38




 
Переход