Tampermonkey как писать скрипты

Tampermonkey — это бесплатное расширение браузера и популярный менеджер UserScript пользовательских скриптов для браузеров Chrome, Microsoft Edge, Safari, Opera Next, и Firefox. Расширение поддерживает такие функции, как простая установка скрипта, автоматические проверки обновлений, простой обзор скриптов, запущеных на вкладке, а также имеет встроенный редактор. Кроме того, есть хорошие шансы на то, что несовместимые скрипты будут нормально работать при использовании расширения.

Tampermonkey: настройка UserScript в браузере


Основные настройки расширения:

  • легкий доступ к скриптам
  • легко конфигурируемая страница настроек
  • автоматическое обновление скриптов через определённые (настраиваемые) промежутки времени
  • использование встроенного редактора
  • Проверка синтаксиса пользовательского скрипта при помощи JSHint (!)

Что можно написать на пользовательских скриптах?

  1. Автоматическое размещение новостей в социальных сетях
  2. Автоматический репостинг сообщений из групп (но придётся постараться)
  3. Автоматическая отметка «Мне нравится»
  4. Много разных и интересных вещей 🙂

Что посмотреть о пользовательских скриптах?

  • Greasemonkey (пользовательские скрипты под Firefox)
  • Учимся писать userscript’ы
  • Зеркало старого http://userscripts.org/

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Как упоминалось в предыдущей статье, юзерскрипты поддерживаются всеми современными браузерами. И даже кое-как поддерживаются в IE7 и выше.

В этой статье мы поговорим о браузерах:

  • Ограничения
  • Проблемы
  • Расширения для запуска юзерскриптов
  • Установка юзерскриптов

Пару слов о движках

Качество поддержки юзерскриптов находится на разном уровне в разных браузерах. Лучше всего поддержка юзерскриптов выполнена в браузерах Firefox и Chrome.
Эти браузеры предоставляют более менее дружелюбные интерфейсы для управления юзерскриптами.

Самые жесткие ограничения на юзерскрипты накладывает Chrome. Но почти все эти ограничения обходятся упаковыванием скрипта в простое расширение. Подробности этого процесса мы обсудим в следующей статье.

Теперь поговорим подробнее о поддержке юзерскриптов в отдельных браузерах.

Поддержка в Firefox

Mozilla Firefox поддерживает юзерскрипты после установки расширения GreaseMonkey (в русском сленге — обезъяна) или Scriptish.
После установки расширений фаерфокс получает поистине мощную поддержку юзерскриптов.
Рассматриваемая далее информация применима в первую очередь к GreaseMonkey (это расширение было первым).

Установка: юзерскрипты устанавливаются простым перетаскиванием файла скрипта в браузер.
Расширения:GreaseMonkey, Scriptish.
Управление: юзерскрипты можно отключить и удалить в меню, добавляемом расширениями.
Особенности:

  • Присутстует мощная библиотека GM API.
  • Подменяется «родной» глобальный объект window.
  • Объекты «родного» окна, к примеру window.page_defined_var, доступны через «небезопасную» ссылку unsafeWindow.
  • Доступны кроссдоменные запросы через интерфейс XmlHttpRequest.
  • Доступен аналог globalStorage.
  • Доступна возможность подключения сторонних библиотек (к примеру, jQuery).
  • Из-за безопасности плагина GreaseMonkey некоторые функции требуют специфических хаков.
    К примеру, запуск GM_setValue(. ) в обработчике ajax-запроса может вызвать ошибку доступа к методам GM API. Для обработки такой ситуации используется конструкция вида setTimeout(function(),0).
  • Отсутствует возможность дебага юзерскриптов. Даже Firebug тут не поможет.

GreaseMonkey добавляет так называемый GM API — набор javascript функций, добавляющих функционал юзерскриптам.
Из самых востребованных функций, которые предоставляет GM API, стоит упомянуть:

  1. Объект «родного окна» страницы unsafeWindow (позволяет подменять функции на странице, использовать уже имеющиеся на странице библиотеки)
  2. Кроссдоменный HttpXmlRequest: GM_xmlhttpRequest
  3. Аналог globalStorage (localStorage без привязки к домену): GM_setValue,GM_getValue и GM_deleteValue

Подробнее о GM API и функциональности GreaseMoneky можно узнать на http://wiki.greasespot.net.

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

К сожалению, ни один браузер, кроме Firefox, не предоставляет GM API. Этот печальный факт заставляет использовать эмуляции GM API через расширения или дополнительные юзерскрипты.

В случае разработки юзерскрипта «с нуля», я считаю предпочтительным отказаться от эмуляции GM API и использовать «велосипеды» собственного производства. Это позволяет уменьшить число зависимостей юзерскрипта, что, в свою очередь, позволяет вести разработку в рамках концепции одного файла: модифицировать придётся всего один файл; пользователю нужен всего один файл для запуска юзерскрипта.

Концепция одного файла позволяет существенно уменьшить сложность поддержки и кроссбраузерной разработки юзерскриптов!

Читайте также:  Excel не удается очистить буфер обмена

Поддержка в Chrome

Google Chrome поддерживает юзерскрипты нативно, т.е. не требует установки плагинов/расширений. Можно (иногда нужно) упаковать юзерскрипт в расширение.

Установка: юзерскрипты устанавливаются простым перетаскиванием файла скрипта в браузер.
Расширения: не нужны. Имеется расширение Tampermonkey, которое упрощает работу со скриптами.
Управление: юзерскрипты, как и расширения, можно отключить и удалить (Настройки -> Инструменты -> Расширения).
Особенности:

  • Не доступен document.frames[i].parent (разрешено в расширении).
  • Не доступны объекты родного окна, к примеру window.page_defined_var (подменить функции страницы будет нельзя, JSONP в юзерскрипте тоже отпадает)
  • Не доступны кроссдоменные запросы (разрешены в расширении)
  • unsafeWindow доступен, но не несёт функциональности GM API.
  • Удобный нативный debug юзерскриптов и расширений.

Расширение представляет собой архив, упаковываемый самим браузером (Настройки -> Инструменты -> Расширения -> Упаковать расширение).
Помимо файла юзерскрипта расширение должно содержать:

  • manifest.json — файл описания расширения. Аналог метаданных юзерскрипа.
  • background.html — файл «фоновой страницы» расширения. Даёт доступ к API расширений через вызов методов chrome.extension.*

Упаковывание юзерскрипта в расширение позволяет обойти многие ограничения, наложенные Google Chrome на юзерскрипты.

Важно: фактически, расширение и юзерскрипт — разные понятия. И если подходить к вопросу строго, стоит говорить о разработке простых расширений под Chrome.
В случае, когда юзерскрипт требует нестандартного, «тяжелого» функционала, он требует упаковки в расширение.
Для упаковывания юзерскрипта в расширение нужно проделать дополнительные действия один раз. Вся последующая разработка будет вестись в рамках концепции одного файла.

Поддержка в Opera

Opera поддерживает юзерскрипты нативно, но не предоставляет сколь-нибудь дружелюбного пользовательского интерфейса для управления скриптами. Такой интерфейс доступен в расширении UJS Manager.

Расширения: UJS Manager, программа UserJS Manager.
Установка: юзерскрипты устанавливаются в настроенную пользователем папку пользовательских скриптов. Её расположение можно задать в настройках браузера: Настройки -> Общие настройки -> Расширенные -> Содержимое -> Настроить JavaScript. Папка с юзерскриптами не должна содержать пробелов.
Управление: юзерскрипты можно отключить, удалив или переместив файл скрипта из папки пользовательских скриптов.
Особенности:

  • Юзерскрипты запускаются «как есть», не оборачиваясь в замыкание, тем самым засоряя глобальную область видимости window.
  • Доступны объекты родного окна, к примеру window.page_defined_var.
  • Доступные специфические события браузера Opera, к примеру BeforeScript.
  • Не доступны кроссдоменные запросы (Обходится использованием специальных событий)
  • unsafeWindow недоступен.
  • Скрипты запускаются в алфавитном порядке.

Поддержка в IE

IE7, IE8, IE9 поддерживают юзерскрипты при использовании плагина Trixie.
К тому же, имеется более продвинутый плагин IE7Pro. В IE7Pro помимо поддержки юзерскриптов имеется множество других бесполезных возможностей.

Важно: Если не отключать дополнительные «приблуды» в IE7Pro, то плагин может изрядно тормозить браузер, особенно на тяжёлых страницах.

Расширения:Trixie, IE7Pro.
Установка: юзерскрипты устанавливаются в папку пользовательских скриптов Trixie (C:/Program Files/Bhelpuri/Trixie/Scripts) или IE7Pro (C:/Program Files/IEPro/userscripts).
Управление: у каждого плагина есть пользовательский интерфейс для управления юзерскриптами.
Особенности:

  • Юзерскрипты запускаются «как есть», не оборачиваясь в замыкание, тем самым засоряя глобальную область видимости window.
  • Доступны объекты родного окна, к примеру window.page_defined_var.
  • Не доступны кроссдоменные запросы (Обойти можно способами, аналогичными тем, что используются при разработке на javascript: JSONP, easyXDM xdr и т.д.)
  • unsafeWindow недоступен.
  • И Trixie, и IEPro имеют модель загрузки скриптов, отличную от модели GreaseMonkey. Скрипты не перезапускаются при обновлении страницы через Ctrl+R или Ctrl+F5. К тому же, скрипты подгружаются по window.onLoad.
  • Для того, чтобы Trixie увидел скрипт, скрипт должен иметь метаданные и обязательно иметь директиву @namespace (см. предыдущую статью).
  • Для того, чтобы IE7Pro увидел скрипт, скрипт должен иметь расширение .ieuser.js.
  • Оба плагина имеют проблемы с запуском в IE9 под Windows 7×64.
    Сообщения о незапускаемом IE7Pro я встречал чаще.

Как видите, с запуском скриптов у IE дела обстоят паршиво. Остаётся радоваться, что такая возможность вообще имеется.

Читайте также:  Как поставить компьютер в режим сна

Важно: Оба плагина могут существовать в системе одновременно, не мешая друг другу.

Важно: Учитывая вышесказанное, я всегда предлагаю своим пользователям использовать Trixie.

Поддержка в Safari

К сожалению, мне не довелось поработать с данным браузером. Буду рад любым разъяснениям в комментариях!
Поговаривают, что для Safari нужны SIMBL и плагин GreaseKit.

Поддержка в Mobile Safari и прочих браузерах

В виду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах, юзерскрипты придётся предоставлять в виде букмарклета.
Соотстветственно, метаданные в таком случае не нужны, а букмарклет придётся запускать руками после каждого рефреша.

На последок

Если придерживаться концепции одного файла, то процесс созидания идёт по такому пути:

  1. Берём шаблон.
  2. Добавляем воду код и метаданные.
  3. Создаём папку и файлы для расширения Chrome.
  4. Пакуем расширение для Chrome, переименовываем файл для IE7Pro.
  5. Раздаём юзерскрипт/расширение пользователям.
  6. .
  7. Исправляем руки баги.
  8. GoTo 4

Список статей:

  1. Учимся писать userscript’ы
  2. » Userscripts. Углубляемся.
  3. Userscripts. Упаковываем юзерскрипт для Chrome
  4. Usersctripts. Кроссдоменные запросы

Доброго времени суток всем желающим приобщиться к миру пользовательских скриптов (они же userscript, userJS, юзерскрипты).

В этой статье я хочу поведать о том, что такое юзерскрипты, c чем их едят и, главное, как их готовят!

Внимание: предполагается минимальное знание javascript.
На практике доказано: юзерскрипты может писать человек, не знакомый с программированием, но обладающий усидчивостью и желанием изучить javascript!
О том, что такое javascript и как с ним обращаться, можно узнать на javascript.ru.

Что такое юзерскрипты?

Кратко: юзерскрипт — это программа, написанная на языке JavaScript, хранящаяся на компьютере пользователя и подключаемая браузером на определенных страницах. Юзерскрипт представляет собой файл с расширением .user.js (именно по расширению браузеры понимают, что файл является юзерскриптом), содержащий метаданные и непосредственно javascript-код.

При подключении к странице юзерскрипт выполняется так же, как и обычные javascript-сценарии.
У юзерскрипта есть доступ к DOM-дереву страницы, в контексте которой он выполняется.
В современных браузерах у юзерскрипта есть доступ к localStorage и прочим HTML5 API.

Юзерскрипты поддерживаются всеми основными современными браузерами (и даже кое-как поддерживаются IE7 и выше).

Самый известный портал юзерскриптов — userscripts.org. Тут можно найти хранилище скриптов, инструменты управления своими скриптами на портале и, что не маловажно, отзывчивый форум (всё на английском).

Немного общей теории

Самыми распространенными являются скрипты под расширение GreaseMonkey для браузера Firefox.
Подробную информацию по GreaseMonkey и написанию юзерскриптов под GreaseMonkey можно узнать на http://wiki.greasespot.net.
Так сложилось исторически, что данный браузер был (и остаётся по сей день) первым, в котором поддержка юзерскриптов была выполнена на высоком уровне.

Не все скрипты, написанные для GreaseMonkey, могут запускаться в других браузерах. Причина в криворукости том, что во многих скриптах используется GM API — набор javascript-функций, специфичных для GreaseMonkey.

Однако, проще всего писать юзерскрипты под браузер Google Chrome.
На это есть ряд причин:

  1. Простым скриптам не нужна поддержка GM API (библиотека, доступная в GreaseMonkey)
  2. Google Chrome, в отличие от Firefox+GreaseMonkey, имеет отличнейший дебаггер.
  3. Сообщения об ошибках юзерскрипта в Firefox ужасны! Если вы не обладаете даром телепатиитвердыми знаниями GreaseMonkey и javascript, написание юзерскрипта может превратится в муки!
  4. Google Chrome не требует расширений для поддержки юзерскриптов. Интерфейс для удаления/отключения юзерскриптов доступен «из коробки».

Очевидные минусы Google Chrome:

  1. Нет доступа к «родному» window.
  2. Не поддерживается директива @ include метаданных. Директива @ match глючит, можно сказать, что она тоже не поддерживается.

Особенности юзерскриптов

Код юзерскриптов может посмотреть любой желающий, вооруженный блокнотом.
Базовые знания javascript позволяют отсечь угрозу установки шпионских и вредоносных скриптов простым анализом кода скрипта (придётся задействовать мозг).

Важно:Если вы не доверяете автору скрипта, главное удостовериться, что скрипт не отсылает пользовательские данные (куки, вводимый текст) на сторонние сервисы!

Все юзерскрипты запускаются после того, как загрузились все основные элементы страницы, но ещё не загрузились картинки. Можно сказать, что юзерскрипты грузятся по событию DOMContentLoaded.
В любом случае, проверки на window.onload не нужны.

Читайте также:  M2ts в mp4 без потери качества

Каждый браузер накладывает свои ограничения на исполнение юзерскриптов, но в целом юзерскрипты могут делать почти всё, что могут скрипты на странице.
Чаще всего юзерскрипты используются для изменения интерфейса страницы или для добавления плюшек, блекджека и шлюх(юзерскрипты для социальных сетей).
Бывают и продвинутые юзерскрипты, которые представляют собой самостоятельные программы (аукционные и игровые боты, плагины-помощники и т.д).

Анатомия юзерскриптов

Юзерскрипт — это текстовый файл с расширением user.js. В начале файла располагается блок метаданных — описание самого скрипта. После блока метаданных следует javascript-код, который и будет исполняться браузером.

Рассмотрим тестовый скрипт, который показывает alert с текстом на определенной странице.

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

В самом начале располагается блок метаданных (в виде комментария).

Этот блок состоит из директив описания юзерскрипта. Ниже в таблице представлены основные директивы и их назначение.

Важно:Все директивы, как и сам блок метаданных, могут отсутствовать.

Директива Назначение
@ name Название юзерскрипта.
Это название будет отображаться в интерфейсе управления
юзерскриптами. Если директива отсутствует, то название
юзерскрипта будет таким же, как и название файла.
@ description Описание юзерскрипта.
Это описание будет отображаться в интерфейсе управления
юзерскриптами.
@ namespace Пространство имён.
Определяет уникальность набора скриптов.
Сюда можно вписать имя домена, принадлежащего вам. Или любую другую строку.
Считайте, что это второе название скрипта. Обязательная директива для Trixie!
@ author Имя автора.
@ license Название лицензии, по которой распространяется юзерскрипт.
@ version Номер версии юзерскрипта.
К сожалению, механизма автообновления нету ни в одном браузере,
поэтому номер версии — это просто цифры, которые отображаются в интерфейсе.
@ include Директива описания url страницы,
на которой нужно запускать юзерскрипт.
Поддерживает вайлдкард *(применимо в GreaseMoneky, Opera, IE).
Для каждого отдельного url нужно использовать отдельную директиву @ include.
@ exclude Директива описания url страницы,
на которой не нужно запускать юзерскрипт.
Поддерживает вайлдкард *(применимо в GreaseMonkey, Opera, IE).
Для каждого отдельного url нужно использовать отдельную директиву @ exclude.
@ match Аналогично @ include, но с более жесткими ограничениями
(применимо в GreaseMonkey старше 0.9.8, Google Chrome).
Подробнее об ограничениях и формате директивы можно
прочитать на этой странице.
Для каждого отдельного url нужно использовать отдельную директиву @ match.

Важно: Как показала практика, полагаться на директиву @ match в юзерскриптах не стоит.
Google Chrome периодически отказывается учитывать @ match
и запускает юзерскрипты на всех страницах.
Для предотвращения такой ситуации в юзерскрипты,
которые будут запускаться не только в Firefox,
нужно добавлять код проверки адреса страницы (см. ссылку [4] в коде юзерскрипта) .

Важно: При отсутствии директив @ include или @ match, юзерскрипты будут запускаться на всех страницах.

В нашем юзерскрипте использован ряд хитростей:

  1. Для того, чтобы юзерскрипты имели одинаковое поведение и не загрязняли глобальную область видимости, код оборачивается в замыкание (см. [1] в коде скрипта) .
  2. Для правильного подключения библиотек внутри юзерскрипта и для обхода некоторых хитрых особеннойстей GreaseMonkey, необходимо «нормализовать» ссылку на глобальную область видимости window (см. [2] в коде скрипта) .
  3. Для того, чтобы юзерскрипт не запускался несколько раз на одной и той же странице, необходимо останавливать работу при запуске юзерскрипта во фреймах (см. [3] в коде скрипта) .
  4. Для того, чтобы юзерскрипт запускался только на нужных нам страницах, необходимо явно проверять url страницы (см. [4] в коде скрипта) .
  5. Благодаря такой структуре, юзерскрипт может быть относительно просто преобразован в букмарклет.

Результат

Наш юзерскрипт готов к использованию!
Нет, серьёзно, вы можете скопировать код юзерскрипта в файл, назвать его my.user.js, и закинуть полученный файл в браузер (используйте Chrome или Firefox с установленным GreaseMonkey).

Конечно, наш юзерскрипт не обладает серьезными функциями, код выглядит страшным и малопривлекательным (для непосвященного человека). Но в итоге мы получили заготовку для кроссбраузерных юзерскриптов.
Это значит, что юзерскрипт можно запустить практически в любом современном браузере!
И это замечательно!