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

Пишем свой первый скрипт для 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 сентября 2008 в 4:35

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

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

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

# 8 сентября 2008 в 8:25

showblogs.ru

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

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

# 8 сентября 2008 в 8:39

yopopt

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

# 8 сентября 2008 в 12:45

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

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

# 8 сентября 2008 в 14:37

Artem

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

# 15 сентября 2008 в 23:46

Alla

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

# 17 сентября 2008 в 18:25

marapper

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

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

# 17 сентября 2008 в 20:14

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

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

# 17 сентября 2008 в 20:15

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

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

# 17 сентября 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 сентября 2008 в 20:44

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

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

# 17 сентября 2008 в 20:52

marapper

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

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

# 17 сентября 2008 в 20:59

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

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

# 17 сентября 2008 в 21:10

marapper

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

# 17 сентября 2008 в 21:19

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

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

# 1 октября 2008 в 19:48

TaunT

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

# 14 октября 2008 в 20:19

StarK

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

# 16 октября 2008 в 1:58

finam

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

# 17 октября 2008 в 16:42

Tust

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

# 20 октября 2008 в 17:46

webamator

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



* Должны быть заполнены. Кстати, nofollow в комментариях отключен.
Из-за дикого спама, и нежелания ставить капчу включена функция «Автор должен иметь ранее одобренные комментарии».




Да, меня тоже утомили спамеры, и так как мне лень решать этот вопрос на стороне сервера, то этот вопрос решите мне вы. Извините.

Сделаете то, что вас просят на картинке, хорошо? Это, типа, вместо кнопки «Отправить»

counter