Блог Дмитрия Волотко - Это нормально © Подпишись на обновления!

Пишем свой первый скрипт для Greasemonkey

Greasemonkey – это расширение для Mozilla Firefox, и некоторых других браузеров на основе движка Gecko, которое позволяет пользователю добавлять JavaScript на любую страницу. Сам файл с JS должен быть оформлен соответствующим образом.

Для чего же пользователю, к примеру мне, или вам, нужно добавлять JS на страницы любых сайтов? Это чудесная возможность управлять внешним видом страницы и её функционалом. Естественно есть ограничения, которые накладывает сам язык JS. Однако и возможностей у него очень и очень много.

Как правило, большинство скриптов для Greasemonkey тесно “дружат” с CSS. Так что получается, этот пост несколько пересекается с темой User-CSS – однако я в название топика не стал выносить этот аспект.

Давайте же напишем пару очень простых скриптов для Greasemonkey, ну а жертвой для наших опытов возьмём, само собой, habrahabr.


Для начала хотелось бы уточнить одну деталь – ниже я рассматриваю написание самых простых скриптов для Greasemonkey, а не основы работы с этим расширением. Подразумевается, что вы уже пользуетесь/пользовались Greasemonkey и не имеете проблем с взаимопониманием.

Сначала разбёрём то, как должен быть оформлен скрипт, что бы Greasemonkey его понял и принял как родного.

К примеру, имеем скрипт, который на каждой странице, кроме habrahabr.ru и моего блога absolvo.ru будет выводить алертом “Hello World!”

Его код крайне простой (установить скрипт можно с этой страницы):

// ----------Куча комментариев----------------------------------------------
//
// ==UserScript==
// @name Hello World
// @namespace http://absolvo.ru/
// @version 0.01
// @source http://absolvo.ru/
// @description Этот скрипт покажет вам алерт с "hello word" на каждой странице, кроме исключений!
// @include *
// @exclude http://*.habrahabr.ru/*
// @exclude http://habrahabr.ru/*
// @exclude http://absolvo.ru/*
// ==/UserScript==

alert(‘Hello world!’);

Рассмотрим детально:

Если перед строкой поставить две слеша “//” – то строка будет считаться закомментированной и будет игнорироваться обработчиком.

==UserScript== и ==/UserScript== – теги, которые сообщают обработчику о том, что между ними заключена служебная информация, обязательная для обработки.

@name – имя ваше скрипта для Greasemonkey;

@namespase – грубо говоря – это дополнительный способ идентификации скрипта. Согласитесь, скриптов с названием “Hello World” просто огромное количество, и возможно один из них уже установлен у вас, и Greasemonkey, благодаря @namespace, не ругнётся на дублирование, и молча установит его. К слову, тут можно написать что угодно, свой ник, адрес сайта, или просто абракадабру.

@description – описание скрипта. Рекомендуется писать латиницей, но если вы пишете его для себя, то можете поэкспериментировать и с кирилицей. Лично у меня всё прекрасно и с кирилицей работает (этот вариант как раз выложен выше), только не забудьте о том,что сохранять файлик со скриптом надо в UTF-8.

@include – адреса страниц, на которых будет выполнятся скрипт. Поддерживает маски, но без регулярок – только звёздочки. Строк “включений” может быть сколько угодно много.

@exclude – адреса страниц, на которых НЕ будет выполнятся скрипт. Поддерживает маски, но без регулярок – только звёздочки. Строк “исключений” может быть сколько угодно много. У меня в примере их три.

Строки @include или @exclude могут и отсутствовать. К примеру, если вы пишете
// @include *
и уверены, что исключения вам не нужны, то строку @exclude можно благополучно не писать.

@version – версия вашего скрипта.

@source – домашняя страница скрипта.

Ну а дальше сам JS – самый обыкновенный. Вот в общем то и всё.

Давайте ради примеру сделаем совершенно несложный, непрактичный, но всё-таки пример, который наверняка ещё раз докажет вам, что в скриптах для Greasemonkey можно использовать все преимущества JS (установить скрипт можно с этой страницы):

// ==UserScript==
// @name Hello habrahabr!
// @namespace http://absolvo.ru/
// @version 0.01
// @source http://absolvo.ru/
// @description example script to insert div with h1 on every page habrahabr.ru
// @include http://habrahabr.ru/*
// @include http://*.habrahabr.ru/*
// @exclude http://absolvo.ru/*
// ==/UserScript==

var logo = document.createElement(“div”);
logo.innerHTML = ‘
<div style=”margin: 0pt auto; width: 800px; text-align: center;”>
<h1 style=”margin: 15px;”>’ +
‘Hello World habrahabr! ‘ +
‘</h1>
</div>
‘;

document.body.insertBefore(logo, document.body.firstChild);

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

Средства для дебага скриптов:
Web Developer Extension;
Aardvark;
Venkman Javascript Debugger;
Web Development Bookmarklets;
JSUnit;
js-lint;

Не стоит изобретать велосипед, есть огромное количество скриптов, хотя бы на http://userscripts.org/ – вполне вероятно, что он уже написан за вас.

Ссылки по теме:
greasespot.net – страница проекта;
userscripts.org – самый большой сборник скриптов;
Страничка с примерами – страница для установки скриптов, которые выступили в роли примеров;
absolvo.ru & RSS – мой блог и мой RSS.

Хочешь новую шкурку для блога? Ищи на Дизайн-Мании!

Если вам понравился топик, проголосуйте пожалуйста тут:

Так же можно почитать:

# 8 September 2008 в 4:35

Социальная сеть для блоггеров sloger.net

Пишем свой первый скрипт для Greasemonkey…

Greasemonkey – это расширение для Mozilla Firefox, и некоторых других браузеров на основе движка Gecko, которое позволяет пользователю добавлять JavaScript на…

# 8 September 2008 в 8:25

showblogs.ru

Пишем свой первый скрипт для Greasemonkey…

Greasemonkey – это расширение для Mozilla Firefox, и некоторых других браузеров на основе движка Gecko, которое позволяет пользователю добавлять JavaScript на…

# 8 September 2008 в 8:39

yopopt

Ещё одна идея “позаимствованная” из Opera… Только называется иначе и сделана чуть удобней благодаря секции ==UserScript==. Впрочем, надо продолжать расширять вглубь и вширь идеи конкурента. :)

# 8 September 2008 в 12:45

Волотко Дмитрий

@yopopt, ну да – всё верно – возьми идею конкурента и сделай лучше!

# 8 September 2008 в 14:37

Artem

Слушай, и как у тебя терпения хватило всё расписать? спасибо, давно искал… :)

# 15 September 2008 в 23:46

Alla

Все было бы хорошо, если бы не то, что пользователи вряд ли будут писать код для добавления JS на страницы. Ну разве что, пользователи-программеры.=)))

# 17 September 2008 в 18:25

marapper

“Позаимствованная”-”позаимствованная”. Хорошая идея потому и называется хорошей, что она реализуется во всех подобных приложений. На Сафари есть специальный кит для их запуска, да и для ИЕ хак придумали. Да и кроме юзерскриптс.орг есть еще несколько подобных хламосборищ.

Вещь хорошая – вон для того же Хабра давно еще Валя делал скрипт для удобного комментирования и скрывания кармы. Движок сменили, так достаточно было исправить код, чтобы все заработало.

# 17 September 2008 в 20:14

Волотко Дмитрий

@Alla, а почему нет? Это же довольно легко.

# 17 September 2008 в 20:15

Волотко Дмитрий

@marapper, для IE не видел *пошёл гуглить*

# 17 September 2008 в 20:35

marapper

Хех, да я и сам особо не пробовал :). Тему спалили, когда мы “хабраштуки” представляли (http://habrahabr.ru/blogs/ilhh/38281/) – говорят, ie7pro поддерживает, и как-то прикручивается через некий http://www.gm4ie.com. При этом нужно модифицировать и сам скрипт – добавить расширение, например: 32631.user.js.gm4ie, и вписать хедер

[Script]
Domains = site.ru
ScriptURL = userscripts.org/scripts/source/32631.user.js

как это работает на деле – не пробовал. Тем более, у джеэса на ие еще больше отличий, чем у js на опере и фф. делать кросс на все – сущая головная боль.

# 17 September 2008 в 20:44

Волотко Дмитрий

@marapper, любопытно, спасибо большое :)
Погуглив, я больше не нашёл более-менее обкатанных решений.
Завтра на работе потестим, потому как домашняя Виста сама убила IE7, умничка ^_^

# 17 September 2008 в 20:52

marapper

Хехе, а смысл особый? :)

А вообще, ты упомянул о User-CSS – мне порой нравится решение с грисманкей лучше всяких стайлишов и т.п. Примерно так мы сделали с “убирателем” кармы – легко можно заменить нужные ЦСС классы в самом скрипте и ограничитель в хедере, чтобы назначать любые атрибуты (а не только скрывать через хидден) любым классам на любом сайте. Вот этот скрипт, в отличие от импрувификации комментов, работает везде.

# 17 September 2008 в 20:59

Волотко Дмитрий

@marapper, да нет смысла, просто интересно :)
Я вот больше думаю о том, что было бы зачётно из GM юзать фреймворк, который висит на сайте. Я по этой части не спец – но хочется попробывать :)

# 17 September 2008 в 21:10

marapper

Можно – но, скорее, тогда лучше полноценный плагин для фф писать. Хотя все зависит от того, что ты хочешь сделать.

# 17 September 2008 в 21:19

Волотко Дмитрий

@marapper, мои изыскания вэтой области из разряда самообразования и для меня практической ценности (пока) не несут :)

# 1 October 2008 в 19:48

TaunT

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

# 14 October 2008 в 20:19

StarK

Спасибки за инфо, давно искала что-то подобное

# 16 October 2008 в 1:58

finam

Не думал, что JS имеет такие функциональные возможности. Спасибо. Беру на заметку.

# 17 October 2008 в 16:42

Tust

Не блог, а поток хороших новостей. Как у вас так получается?

# 20 October 2008 в 17:46

webamator

хотел написать, что банальный плагиат по отношению к опере, да посмотрел другие коменты… меня опередили :)
не вижу смысла ставить какие-то дополнения к ФФ, когда есть опера и десятки (а может и сотни) тысяч готовых User-JS



* Должны быть заполнены.
Из-за дикого спама, и нежелания ставить капчу оставлять ссылку у комментария вообще нельзя. Точно так же нельзя оставлять ссылки в теле комментария.