08.10.2019

Автор: Misterzym

1 Star2 Stars3 Stars4 Stars5 Stars
Загрузка...

UserJS, для чего и как пользоваться?

Все мы знаем, что не все сайты имеют полный функционал, который нам хотелось бы видеть. Порой не хватает каких-то мелочей, а иногда и больших фич, для комфортного использования сайта. Для этого изобрели пользовательские скрипты, они же UserJS — которые выполняются на стороне клиента, и могут иметь различные уровни доступа. Сегодня наша задача, познакомится с ними по ближе!

Сперва, надо условиться, что все пользовательские скрипты выполняются на стороне клиента, а значит нам нужно ПО которое будет их выполнять. Лично для меня, выбор уже давно остановился на Tampermonkey — это расширение для браузера, сейчас есть уже под все новые браузеры. Оно будет хранить, подгружать в страницу и обновлять все ваши пользовательские скрипты. Так же оно позволяет кастомизировать свое меню вашим скриптам, делать резервные копии, включать и выключать активные скрипты.

Мета блок скрипта

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

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

Имя переменной Описание переменной
@name Имя скрипта
@namespace Пространство имен
@version Номер версии
@author Автор
@description Краткое описание
@homepage, @homepageURL, @website, @source Все они будут указаны домашней страницей
@icon, @iconURL,  @defaulticon Иконка, ссылкой или base64
@icon64, @icon64URL Иконка 64*64, если не указать, сгенерируется из предыдушей
@updateURL Ссылка по которой можно получить номер последней версии
@downloadURL Ссылка для обновления, обновится если версия по ссылке будет новее текущей
@supportURL Пользовательская ссылка для тех. поддержки
@include На каких адресах будет работать скрипт, можно использовать ключ много раз, есть символ *
@match Равен предыдущему, но допускаются регулярные выражения, в полной своей мере
@exclude Исключенные адреса, скрипт не будет запускаться, да же если они входят в include
@require Подгружает по ссылке файлы js, загрузка идет ДО исполнения кода скрипта
@resource Предварительно загружает ресурсы, к которым можно получить доступ через сценарии через GM_getResourceURL и GM_getResourceText.
@connect Определяет домены (без доменов верхнего уровня), включая субдомены, которые разрешено получать с помощью GM_xmlhttpRequest
@run-at Указывает на момент запуска скрипта, (document-start, document-body, document-end, document-idle, context-menu)
@grant Список функций API userJS которые будут нужны скрипту
@noframes Запрещает запускать скрипт во фреймах

С помощью этих ключей, можно задать поведение плагина для встраивания, относительно выполнения скрипта.

Особые JS функции доступные скрипту

Кроме мета-данных, всем скриптам доступны так же дополнительные функции, их поддерживает большинство плагинов для userJS, они стандартизированы, но их надо перечислять в поле @grant, что бы они были доступны.

Полный список доступных JS функций

Хранилище, позволяет сохранять данные во внутренней памяти, записывать, получать и удалять

GM_setValue(name,value)
Установите значение ‘name’ для хранилища.
GM_listValues()
Перечислите все имена хранилища.
GM_getValue(name, defaultValue)
Получить значение «name» из хранилища.
GM_deleteValue(name)
Удаляет «имя» из хранилища.

Слушатели хранилища с callback функциями

GM_addValueChangeListener(имя, функция(имя, старое_значение, новое_значение, удаленное) [])
Добавляет прослушиватель изменений в хранилище и возвращает идентификатор прослушивателя.
«имя» — это имя наблюдаемой переменной.
«Удаленный» аргумент функции обратного вызова показывает, было ли это значение изменено из экземпляра другой вкладки (true) или внутри этого сценария (false).
Поэтому эта функциональность может использоваться сценариями разных вкладок браузера для связи друг с другом.
GM_removeValueChangeListener(listener_id)
Удаляет прослушиватель изменений по его идентификатору.
GM_log(сообщение)
Записать сообщение на консоль.
GM_getResourceURL(имя)
Получите URI в кодировке base64 предопределенного тега @resource в заголовке скрипта.

Работ с интерфейсом и внешним видом

GM_addStyle(css)
Добавляет данные стили в документ и возвращает как элемент
GM_registerMenuCommand(name, fn, accessKey)
Зарегистрируйте меню, которое будет отображаться в меню Tampermonkey на страницах, где выполняется этот скрипт, и возвращает идентификатор команды меню.
GM_unregisterMenuCommand(menuCmdId)
Отмените регистрацию команды меню, которая была ранее зарегистрирована GM_registerMenuCommand с указанным идентификатором команды меню.
GM_openInTab(url, параметры), GM_openInTab(url, loadInBackground)
Откройте новую вкладку с этим URL. Объект параметров может иметь следующие свойства:

  • active решает, следует ли сосредоточить внимание на новой вкладке,
  • insert, которая вставляет новую вкладку после текущей и
  • setParent заставляет браузер перефокусировать текущую вкладку на закрытие.

В противном случае новая вкладка просто добавляется. loadInBackground имеет противоположное значение active.Если не указано ни active, ни loadInBackground, вкладка не будет сфокусирована. Эта функция возвращает объект с функцией close, слушатель включен и флаг закрыт .

Запросы, скачивания

GM_xmlhttpRequest(details)
Сделайте xmlHttpRequest.

Свойство деталей :

  • method один из GET, HEAD, POST
  • URL -адрес целевого URL
  • headers т.е. user-agent, referer, … (некоторые специальные заголовки не поддерживаются браузерами Safari и Android)
  • data некоторая строка для отправки через запрос POST
  • binary передача строки данных в двоичном режиме
  • timeout в мс
  • context свойство, которое будет добавлено к объекту ответа
  • responseType один из массива, blob, json
  • overrideMimeType MIME-тип для запроса
  • anonymous не отправлять куки с запросами (см.fetch)
  • fetch (бета) использует выборку вместо запроса xhr
    (в Chrome это приводит к тому, что xhr.abort, details.timeout и xhr.onprogress не работают и заставляет xhr.onreadystatechange получать только события readyState 4)
  • username имя пользователя для аутентификации
  • password пароль
  • onabort callback, который будет выполнен, если запрос был прерван
  • onerror callback, если запрос завершился с ошибкой
  • onloadstart callback будет выполнен, если запрос начал загружаться
  • onprogress callback, если запрос достиг некоторого прогресса
  • onreadystatechange callback, если состояние готовности запроса изменилось
  • ontimeout callback, который будет выполнен, если запрос не выполнен из-за тайм-аута
  • onload callback, если запрос был загружен.
    Он получает один аргумент со следующими атрибутами:

    • finalUrl — окончательный URL после всех перенаправлений, откуда были загружены данные
    • readyState — состояние готовности
    • status — статус запроса
    • statusText — текст статуса запроса
    • responseHeaders — заголовки ответа на запрос
    • response — данные ответа в виде объекта, если был задан details.responseType
    • responseXML — данные ответа в виде документа XML
    • responseText — данные ответа в виде простой строки

Возвращает объект со следующим свойством:
abort — функция, вызываемая для отмены этого запроса

Примечание: синхронный флаг на детали не поддерживается

Важен: если вы хотите использовать этот метод , то пожалуйста, проверьте адрес в @connect .

GM_download(details), GM_download(url, name)
Загружает указанный URL-адрес на локальный диск.

Детали могут иметь следующие атрибуты:

  • url — URL, с которого должны быть загружены данные (обязательно)
  • name — имя файла — по соображениям безопасности расширение файла должно быть занесено в белый список на странице настроек Tampermonkey (обязательно)
  • headers — смотрите GM_xmlhttpRequest для более подробной информации
  • saveAs — логическое значение, показать диалог saveAs
  • onerror callback, если эта загрузка завершилась с ошибкой
  • onload callback, если загрузка завершена
  • onprogress callback, если в процессе загрузки произошел некоторый прогресс
  • ontimeout callback, который будет выполнен, если эта загрузка не удалась из-за тайм-аута
  • Загрузки аргумент OnError обратного вызова может иметь следующие атрибуты:
    • error — причина ошибки
    • not_enabled — функция загрузки не включена пользователем
    • not_whitelisted — запрошенное расширение файла не занесено в белый список
    • not_permitted — пользователь включил функцию загрузки, но не дал разрешения на загрузку
    • not_supported — функция загрузки не поддерживается браузером / версией
    • not_succeeded — загрузка не началась или не удалась, атрибут details может предоставить больше информации
    • detail — подробно об этой ошибке

Возвращает объект со следующим свойством:
abort — функция, вызываемая для отмены загрузки

В зависимости от режима загрузки GM_info предоставляет свойство с именем downloadMode, для которого установлено одно из следующих значений: native , disabled или browser .

Вкладки браузера

GM_getTab(callback)
Получить объект, который является постоянным, пока эта вкладка открыта.
GM_saveTab(вкладка)
Сохраните объект вкладки, чтобы снова открыть его после выгрузки страницы.
GM_getTabs(callback)
Получить все объекты вкладки в виде хэша для связи с другими экземплярами скрипта.
GM_notification(подробности, отменено), GM_notification(текст, заголовок, изображение, onclick)
Показывает уведомление рабочего стола HTML5 и / или выделение текущей вкладки.

Детали могут иметь следующие атрибуты:

  • text — текст уведомления (обязательно, если не выделено выделение)
  • title — заголовок уведомления
  • image — изображение
  • highlight — логический флаг, нужно ли выделять вкладку, которая отправляет уведомление (обязательно, если текст не задан)
  • silent — логический флаг, не воспроизводить ли звук
  • timeout — время, после которого уведомление будет скрыто (0 = отключено)
  • ondone — вызывается, когда уведомление закрыто (независимо от того, было ли оно вызвано таймаутом или щелчком) или вкладка была выделена
  • onclick — вызывается в случае, если пользователь нажимает на уведомление

Все параметры выполняются точно так же, как и соответствующие им свойства details.

GM_setClipboard(data, info)
Копирует данные в буфер обмена. Параметр ‘info’ может быть объектом типа «{type: ‘text’, mimetype: ‘text / plain’}» или просто строкой, выражающей тип («text» или «html»).

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

В разделе UserJS на моем сайте, вы найдете полезные скрипты, моего авторства, большинство из них, стараюсь поддерживать.

  • Комментарии VK