Как упоминалось в предыдущей статье, юзерскрипты поддерживаются всеми современными браузерами. И даже кое-как поддерживаются в IE7 и выше.
В этой статье мы поговорим о браузерах:
Качество поддержки юзерскриптов находится на разном уровне в разных браузерах. Лучше всего поддержка юзерскриптов выполнена в браузерах Firefox и Chrome.
Эти браузеры предоставляют более менее дружелюбные интерфейсы для управления юзерскриптами.
Самые жесткие ограничения на юзерскрипты накладывает Chrome. Но почти все эти ограничения обходятся упаковыванием скрипта в простое расширение. Подробности этого процесса мы обсудим в следующей статье.
Теперь поговорим подробнее о поддержке юзерскриптов в отдельных браузерах.
Mozilla Firefox поддерживает юзерскрипты после установки расширения GreaseMonkey (в русском сленге — обезъяна) или Scriptish.
После установки расширений фаерфокс получает поистине мощную поддержку юзерскриптов.
Рассматриваемая далее информация применима в первую очередь к GreaseMonkey (это расширение было первым).
Установка: юзерскрипты устанавливаются простым перетаскиванием файла скрипта в браузер.
Расширения: GreaseMonkey, Scriptish.
Управление: юзерскрипты можно отключить и удалить в меню, добавляемом расширениями.
Особенности:
GreaseMonkey добавляет так называемый GM API — набор javascript функций, добавляющих функционал юзерскриптам.
Из самых востребованных функций, которые предоставляет GM API, стоит упомянуть:
Подробнее о GM API и функциональности GreaseMoneky можно узнать на http://wiki.greasespot.net.
Исторически, все юзерскрипты писались под браузер Firefox именно из-за наличия удобного плагина.
Это обусловливает тот факт, что все браузеры, которые поддерживают юзерскрипты, дополнит��льно следуют основным правилам спецификации GreaseMonkey по разбору метаданных.
Это означает, что все скрипты, которые были написаны под GreaseMonkey, будут устанавливаться и запускаться в браузерах, поддерживающих юзерскрипты (с минимумом модификаций).
К сожалению, ни один браузер, кроме Firefox, не предоставляет GM API. Этот печальный факт заставляет использовать эмуляции GM API через расширения или дополнительные юзерскрипты.
В случае разработки юзерскрипта «с нуля», я считаю предпочтительным отказаться от эмуляции GM API и использовать «велосипеды» собственного производства. Это позволяет уменьшить число зависимостей юзерскрипта, что, в свою очередь, позволяет вести разработку в рамках концепции одного файла: модифицировать придётся всего один файл; пользователю нужен всего один файл для запуска юзерскрипта.
Концепция одного файла позволяет существенно уменьшить сложность поддержки и кроссбраузерной разработки юзерскриптов!
Google Chrome поддерживает юзерскрипты нативно, т.е. не требует установки плагинов/расширений. Можно (иногда нужно) упаковать юзерскрипт в расширение.
Установка: юзерскрипты устанавливаются простым перетаскиванием файла скрипта в браузер.
Расширения: не нужны. Имеется расширение Tampermonkey, которое упрощает работу со скриптами.
Управление: юзерскрипты, как и расширения, можно отключить и удалить (Настройки -> Инструменты -> Расширения).
Особенности:
Расширение представляет собой архив, упаковываемый самим браузером (Настройки -> Инструменты -> Расширения -> Упаковать расширение).
Помимо файла юзерскрипта расширение должно содержать:
Упаковывание юзерскрипта в расширение позволяет обойти многие ограничения, наложенные Google Chrome на юзерскрипты.
Важно: фактически, расширение и юзерскрипт — разные понятия. И если подходить к вопросу строго, стоит говорить о разработке простых расширений под Chrome.
В случае, когда юзерскрипт требует нестандартного, «тяжелого» функционала, он требует упаковки в расширение.
Для упаковывания юзерскрипта в расширение нужно проделать дополнительные действия один раз. Вся последующая разработка будет вестись в рамках концепции одного файла.
Opera поддерживает юзерскрипты нативно, но не предоставляет сколь-нибудь дружелюбного пользовательского интерфейса для управления скриптами. Такой интерфейс доступен в расширении UJS Manager.
Расширения: UJS Manager, программа UserJS Manager.
Установка: юзерскрипты устанавливаются в настроенную пользователем папку пользовательских скриптов. Её расположение можно задать в настройках браузера: Настройки -> Общие настройки -> Расширенные -> Содержимое -> Настроить JavaScript. Папка с юзерскриптами не должна содержать пробелов.
Управление: юзерскрипты можно отключить, удалив или переместив файл скрипта из папки пользовательских скриптов.
Особенности:
IE7, IE8, IE9 поддерживают юзерскрипты при использовании плагина Trixie.
К тому же, имеется более продвинутый плагин IE7Pro. В IE7Pro помимо поддержки юзерскриптов имеется множество другихбесполезных возможностей.
Важно: Если не отключать дополнительные «приблуды» в IE7Pro, то плагин может изрядно тормозить браузер, особенно на тяжёлых страницах.
Расширения:Trixie, IE7Pro.
Установка: юзерскрипты устанавливаются в папку пользовательских скриптов Trixie (C:/Program Files/Bhelpuri/Trixie/Scripts) или IE7Pro (C:/Program Files/IEPro/userscripts).
Управление: у каждого плагина есть пользовательский интерфейс для управления юзерскриптами.
Особенности:
Как видите, с запуском скриптов у IE дела обстоят паршиво. Остаётся радоваться, что такая возможность вообще имеется.
Важно: Оба плагина могут существовать в системе одновременно, не мешая друг другу.
Важно: Учитывая вышесказанное, я всегда предлагаю своим пользователям использовать Trixie.
К сожалению, мне не довелось поработать с данным браузером. Буду рад любым разъяснениям в комментариях!
Поговаривают, что для Safari нужны SIMBL и плагин GreaseKit.
В виду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах, юзерскрипты придётся предоставлять в виде букмарклета.
Соотстветственно, метаданные в таком случае не нужны, а букмарклет придётся запускать руками после каждого рефреша.
Если придерживаться концепции одного файла, то процесс созидания идёт по такому пути:
Список статей:
В этой статье мы поговорим о браузерах:
- Ограничения
- Проблемы
- Расширения для запуска юзерскриптов
- Установка юзерскриптов
Пару слов о движках
Качество поддержки юзерскриптов находится на разном уровне в разных браузерах. Лучше всего поддержка юзерскриптов выполнена в браузерах 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(){GM_setValue(...)},0).
- Отсутствует возможность дебага юзерскриптов. Даже Firebug тут не поможет.
GreaseMonkey добавляет так называемый GM API — набор javascript функций, добавляющих функционал юзерскриптам.
Из самых востребованных функций, которые предоставляет GM API, стоит упомянуть:
- Объект «родного окна» страницы unsafeWindow (позволяет подменять функции на странице, использовать уже имеющиеся на странице библиотеки)
- Кроссдоменный HttpXmlRequest: GM_xmlhttpRequest
- Аналог 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 и использовать «велосипеды» собственного производства. Это позволяет уменьшить число зависимостей юзерскрипта, что, в свою очередь, позволяет вести разработку в рамках концепции одного файла: модифицировать придётся всего один файл; пользователю нужен всего один файл для запуска юзерскрипта.
Концепция одного файла позволяет существенно уменьшить сложность поддержки и кроссбраузерной разработки юзерскриптов!
Поддержка в 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 7x64.
Сообщения о незапускаемом IE7Pro я встречал чаще.
Как видите, с запуском скриптов у IE дела обстоят паршиво. Остаётся радоваться, что такая возможность вообще имеется.
Важно: Оба плагина могут существовать в системе одновременно, не мешая друг другу.
Важно: Учитывая вышесказанное, я всегда предлагаю своим пользователям использовать Trixie.
Поддержка в Safari
К сожалению, мне не довелось поработать с данным браузером. Буду рад любым разъяснениям в комментариях!
Поговаривают, что для Safari нужны SIMBL и плагин GreaseKit.
Поддержка в Mobile Safari и прочих браузерах
В виду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах, юзерскрипты придётся предоставлять в виде букмарклета.
Соотстветственно, метаданные в таком случае не нужны, а букмарклет придётся запускать руками после каждого рефреша.
На последок
Если придерживаться концепции одного файла, то процесс созидания идёт по такому пути:
- Берём шаблон.
- Добавляем
водукод и метаданные. - Создаём папку и файлы для расширения Chrome.
- Пакуем расширение для Chrome, переименовываем файл для IE7Pro.
- Раздаём юзерскрипт/расширение пользователям.
- ...
- Исправляем
рукибаги. - GoTo 4
Список статей:
- Учимся писать userscript'ы
- » Userscripts. Углубляемся.
- Userscripts. Упаковываем юзерскрипт для Chrome
- Usersctripts. Кроссдоменные запросы
