Фоновая работа JS-скрипта в GreaseMonkey
-
System Failure
Фоновая работа JS-скрипта в GreaseMonkey
Доброго времени суток, уважаемые.
Пишу скрипт для GreaseMonkey, который собирает некую информацию со страницы, сохраняет её, обновляет страницу, ищет новую информацию, сохраняет её, обновляет страницу и т.д. Все в принципе не сложно. Однако проблема в том, что для того чтобы скрипт работал - страница всегда должна быть открыта. Хочется сделать чтобы скрипт выполнялся в Background'е, не влияя на работу пользователя на этой же страничке или не требуя отдельно открытого окна пока пользователь и так работает под необходимым доменом. Я без понятия как это можно было бы организовать. Если у кого есть идеи - был бы очень признателен. Желательно с простейшими примерами, чтобы я смог не только слизать готовый материал, а понять как это работает.
З.Ы.: с аяксом не знаком, но похоже что в скриптах, в которых подобная технология организована - используется нечто подобное.
Решил подробнее объяснить суть того что я хочу:
Скрипт должен собирать информацию с некоторой странички [url=http://some_domain/some_page]http://some_domain/some_page[/url].
Пока пользователь и так находится на [url=http://some_domain/]http://some_domain/[/url] у него появляется небольшое меню с кнопками "Старт" "стоп" "показать инфо". При нажатии на "старт" скрипт начинает работать и раз в "Н"-ое количество минут собирает обновленную информацию с [url=http://some_domain/some_page]http://some_domain/some_page[/url], причем пока он собирает - это не должно влиять на работу пользователя на [url=http://some_domain/]http://some_domain/[/url].
Пишу скрипт для GreaseMonkey, который собирает некую информацию со страницы, сохраняет её, обновляет страницу, ищет новую информацию, сохраняет её, обновляет страницу и т.д. Все в принципе не сложно. Однако проблема в том, что для того чтобы скрипт работал - страница всегда должна быть открыта. Хочется сделать чтобы скрипт выполнялся в Background'е, не влияя на работу пользователя на этой же страничке или не требуя отдельно открытого окна пока пользователь и так работает под необходимым доменом. Я без понятия как это можно было бы организовать. Если у кого есть идеи - был бы очень признателен. Желательно с простейшими примерами, чтобы я смог не только слизать готовый материал, а понять как это работает.
З.Ы.: с аяксом не знаком, но похоже что в скриптах, в которых подобная технология организована - используется нечто подобное.
Решил подробнее объяснить суть того что я хочу:
Скрипт должен собирать информацию с некоторой странички [url=http://some_domain/some_page]http://some_domain/some_page[/url].
Пока пользователь и так находится на [url=http://some_domain/]http://some_domain/[/url] у него появляется небольшое меню с кнопками "Старт" "стоп" "показать инфо". При нажатии на "старт" скрипт начинает работать и раз в "Н"-ое количество минут собирает обновленную информацию с [url=http://some_domain/some_page]http://some_domain/some_page[/url], причем пока он собирает - это не должно влиять на работу пользователя на [url=http://some_domain/]http://some_domain/[/url].
-
Sham
Re: Фоновая работа JS-скрипта в GreaseMonkey
AJAX + скрипт на стороне сервера. Реализация зависит от инструментов (библиотек) JS которые вы используете, и серверного языка...
Для начала лучше поискать готовые решения...
Для начала лучше поискать готовые решения...
-
Sham
Re: Фоновая работа JS-скрипта в GreaseMonkey
скрипт на стороне сервера отпадает. к нему, к серверу, естественно, доступа нет, иначе не было бы смысла для этого писать ГризМанковый скрипт, а можно было бы все функции встроить непосредственно в сам сайт. в том то и дело, что в аналогичных скриптах это как-то организованно без участия сервера в этом процессе.
-
Sham
Re: Фоновая работа JS-скрипта в GreaseMonkey
System Failure, это скрипт, устанавливамый в браузер?
в общем готовых вариантов полно...
цикличность достигается функцией
фоновая работа - асинхронный
в общем готовых вариантов полно...
http://userscripts.org/scripts/search?q=ajax
цикличность достигается функцией
setInterval
фоновая работа - асинхронный
XMLHttpRequest
, для greasemonkey GM_xmlhttpRequest
-
System Failure
Re: Фоновая работа JS-скрипта в GreaseMonkey
скрипт на стороне сервера отпадает. к нему, к серверу, естественно, доступа нет, иначе не было бы смысла для этого писать ГризМанковый скрипт, а можно было бы все функции встроить непосредственно в сам сайт. в том то и дело, что в аналогичных скриптах это как-то организованно без участия сервера в этом процессе.
-
System Failure
Re: Фоновая работа JS-скрипта в GreaseMonkey
спасибо за инфо. выглядит просто - как опробую, отпишу результат 

-
System Failure
Re: Фоновая работа JS-скрипта в GreaseMonkey
Цитата System Failure:
div.innerHTML = responseDetails.responseText;
ответ содержит страницу целиком, поэтому его в DOM нельзя встраивать, нужно ответ предварительно очистить от ненужных тегов (head с содержимым, body, script, iframe и тд), либо вытащить необходимые теги. Все это с помощью регулярных выражений в
div.innerHTML = responseDetails.responseText;
Фоновая работа JS-скрипта в GreaseMonkey
ответ содержит страницу целиком, поэтому его в DOM нельзя встраивать, нужно ответ предварительно очистить от ненужных тегов (head с содержимым, body, script, iframe и тд), либо вытащить необходимые теги. Все это с помощью регулярных выражений в
replace
делается.-
Sham
Re: Фоновая работа JS-скрипта в GreaseMonkey
Цитата Sham:
Все это с помощью регулярных выражений
Никогда с регулярными выражениями до этого не работал... По всей видимости крайне удобная штуковина. Пытался разобраться - сам тэг удалить не проблема, но как удалить информацию находящуюся между открывающим и закрывающим тэгом? Лучше не давать мне готовый результат, а просто направить в нужное русло. Я думал что это лучше всего сделать через lastIndex открывающего и lastIndex закрывающего тэга. И затем все что находится между этими индексами стереть...
Все это с помощью регулярных выражений
Фоновая работа JS-скрипта в GreaseMonkey
Никогда с регулярными выражениями до этого не работал... По всей видимости крайне удобная штуковина. Пытался разобраться - сам тэг удалить не проблема, но как удалить информацию находящуюся между открывающим и закрывающим тэгом? Лучше не давать мне готовый результат, а просто направить в нужное русло. Я думал что это лучше всего сделать через lastIndex открывающего и lastIndex закрывающего тэга. И затем все что находится между этими индексами стереть...
-
System Failure
Re: Фоновая работа JS-скрипта в GreaseMonkey
чтобы вытащить содержимое тега body можно сделать так
Код:
для удаления тега с содержимым можно использовать примерно такое же регулярное выражение в replace...
реализация зависит от условий и понимания того, что нужно в конечном итоге...
Код:
Код: Выделить всё
var bodytext_arr = responseDetails.responseText.match(/]*>([\s\S]*?)/i);
var bodytext = (bodytext_arr) ? bodytext_arr[1] : 'В страничке нет тега body';
div.innerHTML = bodytext;для удаления тега с содержимым можно использовать примерно такое же регулярное выражение в replace...
реализация зависит от условий и понимания того, что нужно в конечном итоге...
-
Sham
Re: Фоновая работа JS-скрипта в GreaseMonkey
Цитата Sham:
(/]*>([\s\S]*?)/i)
можно, пожалуйста, если это не составит большого труда, пояснить синтаксис этого выражения?
я его понял так:
/] исключаем из искомого символ > - зачем?
*> - повторение неких предшествующих элементов ноль или более раз, затем символ ">" (тоже не совсем понятно зачем вначале исключать, потом опять включать символ ">")
([\s\S]*?) - набор любых символов неограниченое количество раз (зачем "?", почему не достаточно одной "*" и для чего заключать всё это в круглые скобки?)
/i - ищем закрывающий тэг, и чтобы "/" воспринимался литерально - используется перед ним "\". i - для не зависимости от регистра.
Заранее огромное спасибо. Объяснять не обязательно, может со временем сам разберусь, но если найдете свободную минуту, был бы очень благодарен.
Добавлено:
Просмотрев как работает этот код, теперь кажется понял зачем круглые скобки... Таким образом для вывода сохраняются только данные, попадающие под "[\s\S]*?", тогда как сами тэги исключаются.
(/]*>([\s\S]*?)/i)
Фоновая работа JS-скрипта в GreaseMonkey
можно, пожалуйста, если это не составит большого труда, пояснить синтаксис этого выражения?
я его понял так:
/] исключаем из искомого символ > - зачем?
*> - повторение неких предшествующих элементов ноль или более раз, затем символ ">" (тоже не совсем понятно зачем вначале исключать, потом опять включать символ ">")
([\s\S]*?) - набор любых символов неограниченое количество раз (зачем "?", почему не достаточно одной "*" и для чего заключать всё это в круглые скобки?)
/i - ищем закрывающий тэг, и чтобы "/" воспринимался литерально - используется перед ним "\". i - для не зависимости от регистра.
Заранее огромное спасибо. Объяснять не обязательно, может со временем сам разберусь, но если найдете свободную минуту, был бы очень благодарен.
Добавлено:
Просмотрев как работает этот код, теперь кажется понял зачем круглые скобки... Таким образом для вывода сохраняются только данные, попадающие под "[\s\S]*?", тогда как сами тэги исключаются.