Что такое Userscripts. Чуть чуть теории.

+27
9.59K
Статья рассказывает о возможности юзерскриптов (они же пользовательские скрипты, или надстройки, или мезонины).

Постановка задачи

Рано или поздно у любого программера или сайтостроителя возникает зудящая мысль: что-то подправить на сайте, где он гость или пользователь. Увы, на чужом сайте он сделать ничего не может. Он просто элементарно не имеет доступа к коду.

Тем не менее, поправить очень хочется. Например, на неком сайте с полезным контентом вдруг сверху, как гильотина, падает рекламный блок. После испуга возникает раздражение: "Я это здесь разве просил? Оно мне нужно?"

Или такой пример. Когда число знакомых в некой социальной сети (наш instantcms.ru тому пример) превышает некое пороговое значение, их уже тяжело удержать в голове. Хотелось бы иметь некую записную книжку. Держать описания сетевых знакомых на отдельном файле, открывать его, когда сидишь в социальной сети и сверяться с ним? Фи, как пОшло в 21-м веке, в мире автоматизации и прогресса...

Хотелось бы иметь на сайте социальной сети автоматическую записную книжку, которая была бы всегда под рукой, в которую Вы можете вписать краткую характеристику о неком юзере: "Обманула меня в феврале 2015 года, заказала компонент, отказалась, когда он был уже готов, не выплатила гонорар", или "Этот ваще идиот и толстый тролль, сперва приписывает оппоненту гадости, потом заявляет, что оппонент в них уже уличен, а потом приписывает себе победу, хотя оппонент находится оффлайн", или "Потрясающе умная девочка, отличный программер, жалко, редко появляется", или "Мутное чмо с прогрессирущим ПГМ".

Или: на неком интернет-магазине очень неудобно переходить в перечень старых заказов. Приходится листать их интерфейс (который писал какой-то школьник с пофигизмом на удобство пользователя) или где-то запоминать (в другом отдельном файле) адрес страницы, который затем следует вставлять через буфер в адресную строку. Вот бы вставить туда кнопку, пнув которую, можно сразу попасть на нужную страницу!

Но, как говорится, фигвам.

Однако, если нельзя, но очень хочется, то все-таки можно )))

По крайней мере, три основных браузера (Opera, FireFox и Chrome) поддерживают Usercripts. Ходят слухи, что их поддерживает даже Осел, но сам я этим браузером пользуюсь лишь раз в полгода. И то, когда мне нужно загрузить Оперу, после переустановки Винды. Поэтому ничего определенного сказать об этом уродце мелкомягких не могу. Safari тоже, говорят, их поддерживает, но там нужны дополнительные телодвижения.

Что это такое — Userscripts, и зачем они нафиг нужны?

Usercripts — это пользовательский скрипт. Я для него нашел несколько прозвищ — юзерсрипт, мезонин, надстройка, пользовательское расширение.

Он пишется на привычном нам js и хранится на локальной машине. При известной ловкости, к этому скрипту можно подключить jquery и наслаждаться дивными удобствами этой библиотеки.

Пролегомены к всемогуществу* ©

Работает эта машинерия так. Браузер при своем запуске загружает в память userscript'ы и применяет их к КАЖДОЙ открытой странице. Таким образом, после загрузки страницы к ней дополнительно подсаживается ваш userscript на js или jquery. А js (а уж, тем более, jquery) позволяет делать с DOM страницы вообще все что угодно. Смекаете, как вкусно пахнет?

Поскольку этот скрипт хранится на локальной машине, и на ней же запускается, никто не в силах (даже великий и ужасный Fuze) запретить мне вешать поверх страниц instantcms.ru заметки из моей записной книжки про разных юзеров. Естественно, поскольку мезонин применяется ко всем открытым в браузере страницам, в коде следует предусмотреть простое условие, чтобы ваше пользовательское расширение применялось к странице с конкретным доменным именем.

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

Если все так хорошо, почему все так плохо?

Набрав в поиске на instantcms.ru слово "userscripts" я получил сакральную фразу "По запросу "userscripts" ничего не найдено". Аналогичную фразу я получил, набрав "пользовательский скрипт". А получив, сел писать эту статью.

Удивительно, что никто из наших гениальных разработчиков до сих пор не напал на эту золотую жилу. А тем не менее, множество продвинутых людей во всем мире этим всемогуществом пользуются. Ведь, если скрипт написан, он может быть опубликован. Например, множество скриптов можно найти на сайте userscripts.org. Более того, существуют репозитории с удобными API, где можно скачать нужный скрипт или удаленно хранить информацию.

Например, FireFox позволяет загрузить расширение GreaseMonkey. После этого использование пользовательских скриптом вообще переходит в детскую забаву — достаточно перетащить иконку скрипта из репозитория себе в браузер.

Chrome ( а с недавних пор и Opera, которая перехала на webKit) поддерживает расширение TamperMonkey, использование которого аналогично GreaseMonkey. Увы, часто бывает, что скрипты, работающие в одной "Обезьяне" не работают на другой.

Чтобы написать действительно кроссбраузерный скрипт, приходится отказываться от API, и полагаться на свои силы.

Структура пользовательского скрипта

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

Первому файлу имя вы даете сами, но расширение у файла должно быть обязательно *.user.js. Его вы пишете сами, на js, применяя для его оформления несколько простых правил. Или скачиваете из сети.

Второй файл, manifest.json или манифест, или заголовок, идет в комплекте к первому. Это обычный json-объект, куда помещается вся инфа о вашем пользовательском скрипте. Он должен быть в родительской папке единственным (иначе файловая система, которая ненавидит держать в одной папке два файла с одним именем, один из них переименует в manifest(1).json. Браузер "схватит" файл manifest.json, а не ваш manifest(1).json, что может привести к косякам). Переименовывать или удалять этот файл — означает вызвать недоумение у браузера и ругань с его стороны.

Как ставить userscript себе в браузер

Полагаю, пользовательский скрипт у вас уже есть (сами написали или где-то скачали) и вам нужно его просто подключить.

Opera

Для новой Oper'ы, на движке wenKit. Для старой… увы.
Настройка и управление (кнопка с красной буквой О) — >Расширения -> Менеджер расширенией (или Ctrl + Shift +E ), нажать кнопку "Режим разработчика". Появятся дополнительные кнопки, одна из которых "Загрузить распакованное расширение". Нажимаете на нее, и у вас откроется проводник, где вы указываете ту папку, где лежат упомянутые два файла. Если все в порядке, скрипт появится тут же, в списке подключенных пользовательских расширений. Начинает он работать сразу после перезагрузки браузера.

Chrome

Настройка и управление (кнопка "Три Полоски") -> Дополнительные инструменты -> Расширения. Поставить галку "Режим разработчика". Откроются дополнительные кнопки, одна из которых — "Загрузить распакованное расширение". Нажимаете на нее, и у вас откроется проводник, где вы указываете ту папку, где лежат упомянутые два файла. Если все в порядке, скрипт появится тут же, в списке подключенных пользовательских расширений. Начинает он работать сразу после перезагрузки браузера.

FireFox

Открыть меню (кнопка "Три Полоски") -> иконка "Дополнения". Нажав на нее, попадаем в addon'ы откуда ставим GreaseMonkey. Из этого аддона уже можно установить свой пользовательский скрипт.

О подводных камнях

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

Вся загвоздка в том, что скрипт попадает на ВАШУ локальную машину и запускается на ней. Скрипт получает полный контроль над ВСЕМИ страницами, которые открыты в браузере. Например, чужой скрипт может попытаться стырить у вас пароли, переслав их хозяину (аякс для того и придуман!). Короче, запуская у себя посторонние скрипты, хотя бы откройте их код и почитайте, что натворил там его автор. Не можете разобраться сами — попросите профи, который пишет на js и которому Вы доверяете. Другими словами, будьте осторожны.

Прощание

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

----
* "Пролегомены к всемогуществу" — так называется пятая глава знаменитой "Суммы технологии" Станислава Лема. Опубликованная еще в 1961 году (когда компьютеры были ламповыми и занимали квартал), эта книга интересна уже тем, что предсказала многие технические достижения нашей эпохи. Например, такие, как Интернет, виртуальная реальность, генная инженерия и многие другие. Уже одно это заставляет преклонятся перед интеллектуальной мощью Лема. Однако эта книга устремлена в глубокое будущее. В ней описаны многие невероятные и восхитительные (но тем не менее, достижимые с помощью науки и техники) чудеса. Не буду пересказывать их здесь, чтобы не сбивать удовольствие у тех, кто эту книгу еще не прочел, но собрался прочесть.
+2
AndroS AndroS 8 лет назад #
Крутая штукенция! smile Ждем-с!
+1
Крот Крот 8 лет назад #
Я аж зачитался, плюсанул за старания)
+3
Владимир Савенко ✝️ Владимир Савенко ✝️ 8 лет назад #
Странник бродит, бродит и находит интересные фишки. Молодец. Мне нравится нестандартный подход и ход твоих мыслей, дружище smile
+2
Странник Странник 8 лет назад #
Идеи у Странника всегда были странные, это верно.
-2
vikont vikont 8 лет назад #
Писатель проклевывается smile Пора пробовать себя в литературе.
0
jorgovich jorgovich 4 года назад #
Кирилл Эдуардович (Странник) , А есть практический пример? Как например, можно отключить в mail.ru с обновлением полностью на всю высоту в новом интерфейсе запилили рекламный блок, и все это хозяйство моргает бликует и откровенно раздражает, хочется прям в браузер встроить
class="slot" - это их блок рекламы display:none; class="layout__main-frame" - margin-right: 0; вот так прописать в скрипте при открытии странички майл.ру... Случайно не знаете как так сделать? С уважением и спасибо за материал..
0
Странник Странник 2 года назад #

Случайно знаю :) 

Поставить себе в браузер userscript типа Adblock — это пользовательское расширение можно скачать в интернете и наслаждаться отсутствием рекламы вообще на любом сайте.

Нечего морочить себе голову, живите проще )))))

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.