Social BrowserProfiles, ИИ и автоматизация

User Scripts · Учитесь, изменяя реальные страницы

Заставьте веб-сайты работать немного лучше, как вы хотите.

User Script — это небольшой фрагмент кода, который выполняется внутри соответствующих веб-страниц. Начните с нескольких строк, внесите одно полезное изменение, а затем изучайте JavaScript только по мере необходимости.

Подходит для начинающихПрактика на каждом урокеJavaScript, CSS и HTMLВстроенный в Social BrowserРаботает с ИИ-автоматизацией
Никогда не писал сценарий?Начните с урока 1. Мы объясним необходимый вам минимум JavaScript.
Уже используете скрипты в стиле Tampermonkey?Перейдите к метаданным, сопоставлению, области действия и Social Browser Profiles.
Хотите полноценные рабочие процессы?Используйте User Scripts вместе с Automation Studio и ИИ-workflows через MCP AI.

Практический курс по написанию сценариев

Пять этапов. По одному полезному результату на каждом этапе.

Пусть каждый тест будет небольшим. Хороший User Script должен быть простым для понимания, легко отключаемым и ограниченным страницами, которым он принадлежит.

Рабочие примеры

Скопируйте крошечный скрипт. Посмотрите изменение страницы.

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

Узнайте, как создать сценарий →
Стартер · JavaScript

Выделите важную ценность

Найдите один элемент и сделайте его более заметным.

Пример
const total = document.querySelector('.total');if (total) { total.style.background = '#fff3a6'; total.style.fontWeight = '700';}

Используйте его для: информационные панели, итоговые значения, метки состояния или страницы контроля качества, которыми вы управляете.

Изучите JavaScript
Стартер · CSS

Скрыть отвлекающую боковую панель

Иногда правило CSS — это все, что вам нужно.

Пример CSS
.promo-sidebar { display: none !important;}

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

Изучите CSS и HTML
Строитель · JavaScript

Добавьте кнопку «Копировать» рядом со значением

Создайте крошечного помощника вместо повторения шагов копирования/вставки вручную.

Пример
const value = document.querySelector('#order-id');if (value) { const button = document.createElement('button'); button.textContent = 'Copy'; button.onclick = () => navigator.clipboard.writeText(value.textContent.trim()); value.after(button);}

Используйте его для: Идентификаторы, ссылки или неконфиденциальные значения, которые вы часто копируете.

Изучите события
React · Динамические страницы

Подождите, пока контент появится позже

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

Пример
const observer = new MutationObserver(() => { const result = document.querySelector('.result-ready'); if (!result) return; result.style.outline = '2px solid #4caf50'; observer.disconnect();});observer.observe(document.body, { childList: true, subtree: true });

Используйте его для: Панели управления SPA и виджеты отложенных страниц.

Изучите динамические страницы
Интегрировать · Profiles

Используйте тот же помощник в отдельном Profiles.

Скрипт остается многоразовым, пока каждый Profile сохраняет свой собственный сеанс браузера и состояние страницы.

Тот же сценарий→Profile А+Profile Б+Profile C
  1. Создайте один небольшой скрипт.
  2. Соответствуйте только предполагаемому сайту.
  3. Откройте сайт в другом тесте Profiles.
  4. Убедитесь, что помощник ведет себя правильно в каждом контексте.
Изучение скриптов + Profiles
Дополнительно · Выберите инструмент

User Script + Automation Studio

Храните постоянные помощники страниц в User Script, а многоэтапную оркестровку — в Automation Studio.

User Script+Рабочий процесс→Многоразовый процесс
  1. User Script улучшает соответствующую страницу.
  2. Workflow выполняет упорядоченные действия браузера.
  3. Автоматизация выбирает Profiles и политику выполнения.
  4. Задача решает, когда запускаться.
Узнайте, когда их комбинировать
Прежде чем запускать код из Интернета: прочитайте его, поймите, каким страницам он соответствует, проверьте поведение хранилища/сети и протестируйте его в контролируемом Profile. В этих примерах намеренно избегаются пароли, файлы cookie и данные сеанса.

Библиотека примеров GM API

Полезные ГМ-рецепты, которые вы можете копировать, читать и адаптировать.

Каждый пример намеренно мал. Начните с одной задачи: скопируйте скрипт, прочитайте каждую строку, а затем измените только те селекторы, URLs или понятные вам метки.

Открыть полное руководство GM API →
Помните настройку? ХранениеЧитать другое происхождение? СетьДобавить помощник страницы? Помощники страницыДобавить действие пользователя? Команды менюПредупредить пользователя? УведомленияСохранить файл? Загрузки
Стартер · Хранение

Помните о предпочтениях компактного режима

Сохраните безобидную настройку пользовательского интерфейса и восстановите ее при следующей загрузке страницы.

JavaScript · постоянное предпочтение
// ==UserScript==// @name Compact mode preference// @match https://example.com/*// @grant GM_getValue// @grant GM_setValue// ==/UserScript== const compact = GM_getValue('compact', false);document.documentElement.classList.toggle('my-compact-mode', compact); const button = document.createElement('button');button.textContent = compact ? 'Use normal mode' : 'Use compact mode';button.addEventListener('click', () => { GM_setValue('compact', !compact); location.reload();});document.body.prepend(button);
Изучите хранилище GM
Конструктор · Помощник по страницам

Добавьте небольшую вспомогательную панель

Внедрите CSS и вспомогательный элемент, не заменяя макет сайта.

JavaScript · GM_addStyle + GM_addElement
// @grant GM_addStyle// @grant GM_addElement GM_addStyle(` .sb-helper { position: fixed; right: 16px; bottom: 16px; padding: 10px 12px; background: #111827; color: white; border-radius: 8px; z-index: 2147483647; }`); GM_addElement(document.body, 'div', { class: 'sb-helper', textContent: 'Page helper is active'});
Изучите помощники страниц
Строитель · Сеть

Прочитайте JSON из разрешенного API.

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

JavaScript · GM_xmlhttpRequest
// ==UserScript==// @name API status helper// @match https://example.com/*// @grant GM_xmlhttpRequest// @connect api.example.com// ==/UserScript== GM_xmlhttpRequest({ method: 'GET', url: 'https://api.example.com/status', responseType: 'json', onload(response) { console.log('Status:', response.response?.status); }, onerror(error) { console.error('Request failed:', error); }});
Изучите привилегированные запросы
Реагировать · Буфер обмена

Безопасное копирование ссылки на страницу

Скопируйте неконфиденциальное значение после явного щелчка пользователя.

JavaScript · GM_setClipboard
// @grant GM_setClipboard const reference = document.querySelector('#reference-id');if (reference) { const copyButton = document.createElement('button'); copyButton.textContent = 'Copy reference'; copyButton.addEventListener('click', () => { GM_setClipboard(reference.textContent.trim(), 'text'); copyButton.textContent = 'Copied'; }); reference.after(copyButton);}
Изучите доступ к буферу обмена
Реагировать · Команда меню

Добавьте действие сценария в меню User Script.

Не допускайте дополнительных действий в пользовательский интерфейс страницы и запускайте их только по запросу пользователя.

JavaScript · GM_registerMenuCommand
// @grant GM_registerMenuCommand GM_registerMenuCommand('Highlight overdue rows', () => { document.querySelectorAll('[data-status="overdue"]').forEach(row => { row.style.outline = '2px solid currentColor'; });});
Изучите команды меню
Интеграция · Уведомление

Уведомлять о готовности длинностраничного задания

Показывать уведомление браузера только о значимом событии.

JavaScript · GM_notification
// @grant GM_notification function notifyReady(label) { GM_notification({ title: 'Social Browser User Script', text: `${label} is ready to review`, timeout: 5000 });} // Call this only after your script detects the result.notifyReady('The report');
Изучите уведомления
Интеграция · Вкладки

Откройте связанную страницу на фоновой вкладке.

Открыть вспомогательную информацию, не заменяя страницу, которую просматривает пользователь.

JavaScript · GM_openInTab
// @grant GM_openInTab const helpButton = document.createElement('button');helpButton.textContent = 'Open details';helpButton.addEventListener('click', () => { GM_openInTab('https://example.com/details', { active: false, insert: true });});document.body.prepend(helpButton);
Вкладка «Обучение» APIs
Дополнительно · Состояние вкладки

Запоминать прогресс для одной вкладки браузера

Сохраняйте временное состояние сценария прикрепленным к текущей вкладке, а не к глобальному хранилищу.

JavaScript · GM_getTab + GM_saveTab
// @grant GM_getTab// @grant GM_saveTab GM_getTab(tabState => { tabState.reviewStep = (tabState.reviewStep || 0) + 1; GM_saveTab(tabState); console.log('Review step:', tabState.reviewStep);});
Изучите состояние каждой вкладки
Дополнительно · Скачать

Скачать файл отчета

Используйте возможность загрузки файла, который пользователь намеренно попросил сохранить в сценарии.

JavaScript · GM_download
// @grant GM_download GM_download({ url: 'https://example.com/reports/today.csv', name: 'today-report.csv', saveAs: true, onload() { console.log('Download completed'); }, onerror(error) { console.error('Download failed:', error); }});
Изучите загрузки
Дополнительно · Ресурсы

Объединение небольшого текстового ресурса со сценарием

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

JavaScript · @resource + GM_getResourceText
// ==UserScript==// @name Template resource example// @match https://example.com/*// @resource helperTemplate https://example.com/assets/helper.html// @grant GM_getResourceText// ==/UserScript== const template = GM_getResourceText('helperTemplate');if (template) { const box = document.createElement('div'); box.innerHTML = template; document.body.append(box);}
Изучите ресурсы
Прежде чем запускать скопированный кодПрочитайте это, сузьте его @match правила, пересматривайте каждое @grant and @connectи сначала проверьте его в безопасном Profile.
User Scripts КурсОбзор курса
Выберите урок или начните курс с гидом.
Стартер · Урок 1

Что на самом деле представляет собой User Script

Время 5 минутЦель Поймите, что может изменить User Scripts

User Script — это JavaScript, который браузер запускает для вас на страницах, соответствующих выбранным вами правилам. Он может вносить небольшие изменения в веб-сайт после открытия страницы: выделять информацию, добавлять ярлык, скрывать беспорядок, поддерживать повторную форму или реагировать на события на странице.

Без сценария

  1. Откройте страницу.
  2. Сделайте такую же небольшую корректировку.
  3. Повторите это при следующем посещении.

С User Script

  1. Создайте правило один раз.
  2. Ограничьте его нужными страницами.
  3. Пусть он запускается автоматически при открытии этих страниц.

Почему User Scripts полезен внутри Social Browser

Social Browser объединяет User Scripts с постоянным браузером Profiles. Profile может сохранять свой собственный сеанс, хранилище, настройки и сценарии, поэтому небольшая настройка может оставаться близкой к контексту браузера, в котором вы его фактически используете.

Важно: User Script запускает код внутри веб-страниц. Устанавливайте скрипты только из источников, которые вы понимаете и которым доверяете. Полезный скрипт должен быть легко читаемым, ограниченным количеством необходимых страниц и легко отключаемым.
Стартер · Урок 2

Создайте свой первый User Script

Время 5–10 мин.Цель Запустите крошечный скрипт и увидите изменение страницы.

Начните с чего-нибудь безобидного и видимого. Цель — доказать весь процесс: создать → сохранить → включить → открыть соответствующую страницу → увидеть результат.

1

Открыть User Scripts

Откройте встроенный менеджер User Script в Social Browser и создайте новый скрипт.

2

Дайте этому четкое имя

Используйте имя, описывающее, что делает сценарий, например Highlight Test Heading.

3

Выберите безопасную тестовую страницу

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

4

Добавьте несколько строк JavaScript

const heading = document.querySelector('h1');if (heading) heading.style.outline = '3px solid currentColor';
5

Сохраните и включите его

Перезагрузите соответствующую страницу. Если заголовок имеет контур, ваш первый сценарий работает.

Правило для начинающих: один сценарий, один видимый результат. Не начинайте с копирования сценария из 500 строк, который вы не можете объяснить.
Стартер · Урок 3

Заставьте скрипт запускаться только там, где ему место.

Время 5 минутЦель Безопасно используйте разрешенные и исключенные правила URL.

Сопоставление страниц — один из наиболее важных навыков User Script. Скрипту, который должен настроить одну панель мониторинга, не требуется разрешение на запуск на каждом посещаемом вами веб-сайте.

1

Разрешено URLs

Опишите страницы, на которых скрипт полезен.

2

Исключено URLs

Заблокируйте страницы внутри этой области, где скрипт должен оставаться неактивным.

3

Проверьте обе стороны

Откройте одну совпадающую страницу и одну несовпадающую страницу, прежде чем доверять правилу.

Этап 1 завершенЕсли ваш скрипт работает только на той странице, которую вы задумали, вы готовы создать что-то полезное.
Строитель · Урок 4

JavaScript, который вам действительно нужен в первую очередь

Время 10 минутЦель Чтение и изменение простых элементов страницы

Вам не нужен весь язык JavaScript, чтобы сделать User Scripts полезным. Начните с четырех идей: найти элемент, прочитать значение, что-то изменить и отреагировать на событие.

НужнаПростой JavaScript
Найдите один элементdocument.querySelector('.price')
Прочитайте его текстelement.textContent
Изменить текстelement.textContent = 'Done'
Изменить стильelement.style.fontWeight = '700'
Реагировать на щелчокbutton.addEventListener('click', handler)

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

Строитель · Урок 5

Используйте JavaScript, CSS и HTML для разных заданий.

Время 8 минЦель Выберите самый простой инструмент для изменения страницы
JS

JavaScript

Используйте его для логики, событий, чтения значений и изменения поведения.

CSS

CSS

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

HTML

HTML

Используйте его, когда скрипту нужна небольшая вспомогательная панель, метка или элемент управления.

Делайте изменения на странице небольшими: добавить один вспомогательный блок легче в обслуживании, чем перестраивать интерфейс веб-сайта внутри скрипта.
Строитель · Урок 6

Используйте встроенный менеджер сценариев

Время 7 минЦель Уверенно создавайте, находите, активируйте и редактируйте сценарии.

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

  • Создайте и отредактируйте сценарий.
  • Найдите или идентифицируйте его по ясному имени.
  • Включите или отключите его, не удаляя.
  • Просмотрите правила JavaScript, CSS, HTML и URL вместе.
  • Держите экспериментальные сценарии явно названными тестами.
Строитель · Урок 7

Импортируйте сценарии, не рассматривая Интернет как доверенный код.

Время 8 минЦель Импортируйте из файла или URL и проверьте перед включением.

Social Browser может создавать сценарии вручную или импортировать их из файла или напрямую URL. Он также может распознавать общие процессы установки User Script. Импортировать удобно, но удобство – это не то же самое, что доверие.

1

Знать источник

Отдавайте предпочтение коду, который вы написали, принадлежит вашей команде или источнику, который вы можете проверить.

2

Прочтите метаданные

Проверьте имя, соответствующее URLs, и поведение выполнения.

3

Просмотрите код

Ищите неожиданные сетевые запросы, действия скрытых форм, доступ к хранилищу или широкое соответствие страниц.

4

Протестируйте в сейфе Profile

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

Строитель · Урок 8

Метаданные сообщают браузеру, как должен запускаться скрипт.

Время 8 минЦель Понимание настроек кода

Полезный User Script — это больше, чем JavaScript. Social Browser может использовать информацию о скрипте, такую ​​как заголовок/имя, разрешенный и исключенный URLs, видимость меню, область действия окна/фрейма, автоматическое выполнение и выполнение на этапе предварительной загрузки.

НастройкаВопрос, на который он отвечает
Имя / титулЧто делает этот скрипт?
Разрешено URLsГде он может работать?
Исключено URLsГде он не должен запускаться?
Объем окна/рамкиКакой контекст документа должен его получить?
Автоматическое исполнениеДолжен ли он работать без ручного действия в меню?
Этап предварительной загрузкиНужно ли начинать загрузку страницы раньше?
Видимость менюДолжен ли пользователь иметь возможность запускать его из меню сценария?
Реагировать · Урок 9

Реагируйте на страницу вместо того, чтобы постоянно ее проверять

Время 8 минЦель Используйте события DOM для простых взаимодействий

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

const button = document.querySelector('#save');button?.addEventListener('click', () => { console.log('Save button clicked');});
Правило производительности: предпочитают событие или ограниченного наблюдателя постоянному высокочастотному таймеру.
Реагировать · Урок 10

Обработка страниц, которые изменяются после загрузки

Время 10 минутЦель Работа с отложенными и перерисованными элементами.

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

Избегайте произвольных длительных задержек. Ожидание в течение пяти секунд повсюду может скрыть проблему, но сделает сценарии медленными и ненадежными. Дождитесь того, что вам действительно нужно, и перестаньте ждать после разумного предела.
Реагировать · Урок 11

Сохраняйте небольшие предпочтения, а не секреты

Время 7 минЦель Помните о безобидных настройках скрипта

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

Хорошие данные о предпочтениях

  • Панель открыта/закрыта.
  • Строков на странице.
  • Вариант отображения.

Относиться как к деликатному

  • Пароли.
  • Секреты 2FA.
  • Материал сеанса/файла cookie.
Реагировать · Урок 12

Сначала прочитайте данные страницы; запрашивать другие данные только при необходимости

Время 8 минЦель Сделайте доступ к данным простым и понятным

Если информация уже есть на странице, прочтите ее из DOM. Если вашему сценарию действительно нужен другой веб-ресурс, обычные сетевые правила браузера по-прежнему имеют значение. Держите запросы видимыми в своем коде и избегайте отправки данных страницы/аккаунта туда, где пользователь не ожидал.

Простое правило: если скрипт отправляет данные за пределы страницы, проверяющий должен точно видеть, что отправляется и зачем.
Интеграция · Урок 13

User Scripts становится более полезным благодаря постоянному Profiles.

Время 8 минЦель Понимание поведения скриптов в отдельных контекстах браузера.

Social Browser Profile сохраняет собственный контекст браузера. Это означает, что вы можете разделять сеансы учетной записи и состояние страницы, при этом повторно используя одну и ту же идею сценария, где это необходимо. Протестируйте сценарий в конкретном контексте Profile, где он фактически будет выполняться.

Профиль→Соответствующая страница→User Script→Небольшое улучшение страницы

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

Интеграция · Урок 14

Рамки и сроки: запуск нужного документа в нужный момент

Время 10 минутЦель Обдуманно выбирайте объем и сроки выполнения.

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

Область действия

Главная страница или рамка?

Определите, какой документ на самом деле содержит этот элемент.

Тайминг

Обычный или предзагрузка?

Начинайте раньше только тогда, когда сценарию действительно необходимо повлиять на инициализацию.

Динамический

Отрисовано позже?

Если страница создаст элемент позже, обрабатывайте динамический контент, а не слепо меняйте область действия.

Интеграция · Урок 15

Отладка User Script без догадок

Время 10 минутЦель Узнайте, связана ли проблема с совпадением, временем, кодом или веб-сайтом.
1

Подтвердите, что скрипт включен

Не отлаживайте код, который в данный момент отключен.

2

Подтвердите совпадения URL

Проверьте разрешенные и исключенные правила.

3

Добавьте понятные консольные сообщения

Запишите время запуска сценария и перед тестируемой операцией.

4

Проверьте целевой элемент

Посмотрите, существует ли он еще и была ли страница повторно отрисована.

5

Отключите скрипт и сравните

Если проблема со страницей остается после ее отключения, возможно, причиной не является скрипт.

Этап 4 завершенТеперь вы можете создавать, определять область действия и отлаживать обычный User Scripts внутри Social Browser.
Продвинутый · Урок 16

Пишите сценарии, которым легко доверять и которые легко поддерживать.

Время 10 минутЦель Уменьшите ненужный доступ и скрытое поведение
  • Сопоставьте только те страницы, которые нужны сценарию.
  • Используйте понятные имена и комментарии для неочевидного поведения.
  • Сохраняйте сетевые адресаты видимыми в коде.
  • Избегайте хранения конфиденциальной информации учетной записи.
  • Остановите наблюдателей и таймеры, когда они больше не нужны.
  • Не скрывайте важные побочные эффекты за расплывчатыми вспомогательными функциями.
  • Протестируйте изменения в безопасном Profile перед важными сеансами.
  • Держите быстрый способ отключения скрипта.
Продвинутый уровень · Урок 17

Практические рецепты User Script

Время 15 мин.Цель Начните с небольших многоразовых выкроек.
Рецепт 1 · Выделите важные ценностиНовичок
  1. Сопоставьте одну конкретную страницу.
  2. Найдите элементы значения.
  3. Добавьте класс или стиль CSS.
  4. Ничего не делайте, если элементы отсутствуют.
Рецепт 2 · Добавьте ярлык страницыНовичок
  1. Создайте одну маленькую вспомогательную кнопку.
  2. Вставьте его рядом с соответствующей областью.
  3. Прислушайтесь к щелчку.
  4. Выполните одно действие на локальной странице.
Рецепт 3 · Очистите приборную панельСредний
  1. Скройте только четко выраженный визуальный беспорядок.
  2. Оставьте элементы управления главной страницы нетронутыми.
  3. Сохраните одну безобидную настройку отображения, если она полезна.
Рецепт 4 · Помогите повторить формуСредний
  1. Обнаружьте форму.
  2. Заполняйте только нечувствительные повторяющиеся значения, которые ожидает пользователь.
  3. Оставьте окончательное решение об отправке видимым для пользователя, если только рабочий процесс явно не требует автоматизации.
Рецепт 5 · Ждите динамического контентаСредний
  1. Найдите элемент один раз.
  2. В случае отсутствия обратите внимание на узкую родительскую область.
  3. Прекратите наблюдение после появления элемента или по истечении таймаута.
Продвинутый · Урок 18

User Script, Automation Studio или оба?

Время 8 минЦель Выбирайте самый простой инструмент для работы
Я хочу…Начните с…
Изменить внешний вид или поведение одной соответствующей страницы всякий раз, когда я ее открываюUser Script
Добавьте небольшой помощник страницы или ярлыкUser Script
Запуск упорядоченного многоэтапного процесса браузераAutomation Studio Workflow
Запустите тот же процесс через Profiles или по расписанию.Automation Studio
Сохраняйте полезную настройку страницы во время работы автоматизации Workflow.User Script + Automation Studio
Нужна пользовательская логика страницы внутри более крупного рабочего процессаИспользуйте простейшую поддерживаемую комбинацию и четко разграничивайте обязанности.
Хорошая архитектура скучна: сохраняйте постоянную настройку страниц в User Script и оркестровку рабочих процессов в Automation Studio. Не превращайте один гигантский скрипт в целую систему автоматизации, если в Студии уже предусмотрена функция рабочего процесса.
GM API Ссылка

ГМ API в Social Browser — от первого использования до продвинутых скриптов

Используйте это, когда простой страницы JavaScript недостаточноЦель Безопасно используйте возможности сценариев на уровне браузера

GM API предоставляют User Script возможности, которыми не всегда обладает обычная страница JavaScript, такие как хранилище на уровне сценария, запросы между источниками, уведомления, загрузки, доступ к буферу обмена, ресурсы и команды меню сценария. В Social Browser явное @grant скрипт получает только те возможности, которые он запрашивает.

Просмотрите по категории или выполните поиск по имени API.

Начните с малого: не добавляйте каждый @grant строка «на всякий случай». Запрашивайте только те API, которые фактически использует сценарий. Это облегчает понимание, просмотр и доверие к сценарию.

Начните здесь

How @grant работает

Для новых сценариев объявляйте каждый используемый вами привилегированный API. Social Browser запускает сценарии с явными разрешениями в изолированном мире User Script и объединяет только запрошенные возможности. Скрипт с @grant none работает без возможностей GM.

JavaScript · минимальный разрешенный скрипт
// ==UserScript==// @name Remember display mode// @namespace https://example.com/my-scripts// @match https://example.com/*// @grant GM_getValue// @grant GM_setValue// ==/UserScript== const mode = GM_getValue('displayMode', 'compact');console.log('Saved mode:', mode); GM_setValue('displayMode', 'comfortable');

Классический GM_* или современный GM.*?

Social Browser поддерживает знакомые классические имена и их современные. GM.* формы для основного набора возможностей GM. Современная форма поддерживает Promise, поэтому используйте await. Выберите один стиль для каждого сценария и будьте последовательны.

Классический
JavaScript
const theme = GM_getValue('theme', 'dark');GM_setValue('theme', 'light');
Современный
JavaScript
const theme = await GM.getValue('theme', 'dark');await GM.setValue('theme', 'light');

GM_info / GM.info

Используйте информацию о сценарии, когда вам нужно проверить текущий сценарий, версию, разрешения, совпадения или информацию о времени выполнения Social Browser. Не жестко закодируйте поведение строк версии, если вам действительно не нужна логика совместимости.

JavaScript · проверка метаданных скрипта
// @grant GM_info console.log('Script:', GM_info.script.name);console.log('Version:', GM_info.version);console.log('Handler:', GM_info.scriptHandler);console.log('Grants:', GM_info.scriptGrants);console.log('Matches:', GM_info.scriptMatches);

Хранение

Запомните небольшие данные скрипта

Хранилище GM ограничено User Script, а не обычным страничным хранилищем. Он идеально подходит для безобидных настроек, счетчиков и состояния сценария. Не используйте его в качестве обычного хранилища для паролей, секретов 2FA, файлов cookie или материалов сеанса.

APIЧто он делаетТипичный результат
GM_getValue(key, defaultValue)Прочитайте одно сохраненное значение.Сохраненное значение или значение по умолчанию.
GM_setValue(key, value)Сохраните одно значение.Обновляет хранилище на уровне сценария.
GM_deleteValue(key)Удалить одно значение.Ключ исчезает.
GM_listValues()Список сохраненных ключей.Массив имен ключей.
GM_getValues(...)Прочтите несколько значений вместе.Объект ценностей.
GM_setValues(object)Сохраните несколько значений вместе.Обновляет каждый предоставленный ключ.
GM_deleteValues(keys)Удалить несколько ключей.Удаляет перечисленные значения.
JavaScript · сохранить настройки пользователя
// @grant GM_getValue// @grant GM_setValue// @grant GM_deleteValue const settings = GM_getValue('settings', { compact: true, rowsPerPage: 25}); settings.rowsPerPage = 50;GM_setValue('settings', settings); // Reset later if the user asks for defaults.// GM_deleteValue('settings');

Наблюдайте за изменением значения

GM_addValueChangeListener полезно, когда один и тот же сценарий открыт более чем в одном фрейме или вкладке. Обратный вызов получает (name, oldValue, newValue, remote). В Social Browser события изменения значений могут синхронизироваться между фреймами/вкладками в одном Profile/сеансе.

JavaScript · прослушиватель хранилища
// @grant GM_addValueChangeListener// @grant GM_removeValueChangeListener const listenerId = GM_addValueChangeListener( 'displayMode', (name, oldValue, newValue, remote) => { console.log({ name, oldValue, newValue, remote }); }); // Remove it when you no longer need it.// GM_removeValueChangeListener(listenerId);

Помощники страницы

Добавьте стили или небольшие элементы

GM_addStyle(css) / GM.addStyle(css)

Используйте это, когда настройка страницы в основном визуальная. Это чище, чем установка множества отдельных element.style свойства.

JavaScript · ввести CSS
// @grant GM_addStyle GM_addStyle(` .important-total { font-weight: 700; outline: 2px solid currentColor; padding: 4px 8px; }`);

GM_addElement(...) / GM.addElement(...)

Создайте небольшой элемент DOM и безопасно добавьте его. Вы можете сначала передать родительский элемент или опустить его, чтобы использовать тело страницы.

JavaScript · добавить вспомогательную кнопку
// @grant GM_addElement const panel = document.querySelector('#account-panel');if (panel) { GM_addElement(panel, 'button', { type: 'button', textContent: 'Copy account ID', className: 'my-copy-button', onclick() { const id = panel.querySelector('.account-id')?.textContent?.trim(); if (id) navigator.clipboard.writeText(id); } });}

Сеть

Делайте привилегированные запросы с помощью GM_xmlhttpRequest

Обычная страница fetch() контролируется обычными правилами браузера/CORS страницы. Запрос GM Social Browser API использует выделенный канал запроса процесса браузера. Перед отправкой запроса его пункт назначения сверяется с указанным в скрипте. @connect правила.

Доступ к сети заслуживает рассмотрения. Делайте пункты назначения узкими и видимыми. Никогда не отправляйте данные учетной записи/страницы в службу, которую пользователь не ожидает.
JavaScript · JSON запрос
// ==UserScript==// @match https://app.example.com/*// @connect api.example.com// @grant GM_xmlhttpRequest// ==/UserScript== const response = await GM_xmlhttpRequest({ method: 'GET', url: 'https://api.example.com/status', responseType: 'json', timeout: 10000, headers: { Accept: 'application/json' }}); console.log(response.status, response.response);

Обратные вызовы и прерывание

Запрос API поддерживает общие обратные вызовы запроса и возвращает дескриптор, который можно прервать. Используйте тайм-аут, даже если вы также поддерживаете прерывание.

JavaScript · обратные вызовы + прерывание
// @connect api.example.com// @grant GM_xmlhttpRequest const request = GM_xmlhttpRequest({ url: 'https://api.example.com/slow-report', timeout: 15000, onload(response) { console.log('Loaded:', response.status); }, onerror(error) { console.error('Request failed:', error); }, ontimeout() { console.warn('Request timed out'); }, onabort() { console.log('Request aborted'); }}); // Cancel only if your script no longer needs the result.// request.abort();

Современная форма: GM.xmlHttpRequest(...) and GM.xmlhttpRequest(...) сопоставить одну и ту же возможность запроса.

Ресурсы

Объедините повторно используемый текст, CSS или другие ресурсы.

Объявить актив с помощью @resource, затем прочитайте его по имени. GM_getResourceText returns decoded text. GM_getResourceURL возвращает data URL, сохраняющий MIME-тип ответа.

JavaScript · @resource
// ==UserScript==// @resource helperCss https://example.com/assets/helper.css// @grant GM_getResourceText// @grant GM_getResourceURL// ==/UserScript== const css = await GM_getResourceText('helperCss');console.log(css); const dataUrl = await GM_getResourceURL('helperCss');console.log(dataUrl);

Если имя ресурса не существует, API возвращает undefined. Имена ресурсов должны быть короткими и информативными.

Помощники браузера

Вкладки, уведомления и буфер обмена

GM_openInTab(url, options)

Откройте URL на вкладке Social Browser. Использование active: false когда новая вкладка должна открыться без фокуса.

JavaScript · открыть фоновую вкладку
// @grant GM_openInTab GM_openInTab('https://example.com/report', { active: false});

Состояние сценария для каждой вкладки: GM_getTab, GM_saveTab, GM_getTabs

Эти API хранят небольшое состояние User Script, связанное с вкладками. Они полезны, когда скрипту необходимо запомнить, какой шаг или представление принадлежит определенной вкладке, не смешивая его с глобальными настройками скрипта.

JavaScript · запомнить состояние этой вкладки
// @grant GM_getTab// @grant GM_saveTab// @grant GM_getTabs const tabState = await GM_getTab();await GM_saveTab({ ...tabState, lastPanel: 'orders'}); const allScriptTabs = await GM_getTabs();console.log(allScriptTabs);

GM_notification

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

JavaScript · уведомление
// @grant GM_notification await GM_notification({ title: 'Report ready', text: 'The page data is ready to review.'});

GM_setClipboard(data, type)

Скопируйте текст (или HTML по запросу) в буфер обмена. Используйте его, когда это возможно, после четкого действия пользователя, чтобы пользователь понимал, почему его буфер обмена изменился.

JavaScript · скопировать значение страницы
// @grant GM_setClipboard const orderId = document.querySelector('.order-id')?.textContent?.trim();if (orderId) { GM_setClipboard(orderId, 'text');}

Меню и загрузки

Добавьте преднамеренные действия пользователя

GM_registerMenuCommand / GM_unregisterMenuCommand

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

JavaScript · команда меню
// @grant GM_registerMenuCommand// @grant GM_unregisterMenuCommand const commandId = GM_registerMenuCommand( 'Highlight overdue rows', () => { document.querySelectorAll('.row.overdue').forEach((row) => { row.style.fontWeight = '700'; }); }); // Remove the menu item later if the script no longer needs it.// GM_unregisterMenuCommand(commandId);

GM_download

Запустите загрузку через Social Browser. Дайте файлу понятное имя и используйте его только в том случае, если загрузка является частью видимой цели сценария.

JavaScript · скачать файл
// @grant GM_download await GM_download({ url: 'https://example.com/reports/today.csv', name: 'today-report.csv'});

Расширенный

unsafeWindow: мост к глобальным переменным страницы только при необходимости

Явное разрешение User Scripts обычно выполняется в изолированном мире. unsafeWindow — это дополнительный мост к глобальным переменным в главном мире страницы. Используйте его только тогда, когда веб-сайт предоставляет переменную страницы или функцию, к которой обычный доступ к изолированному сценарию не может получить доступ.

Используйте узко: Глобальные параметры страницы принадлежат веб-сайту и могут быть изменены без предварительного уведомления. Предпочитайте обычные DOM API, когда они решают проблему.
JavaScript · прочитать страницу глобально
// @grant unsafeWindow const appVersion = unsafeWindow.appConfig?.version;if (appVersion) { console.log('Page app version:', appVersion);}

Правило мира казни

МетаданныеПоведение в Social Browser
@grant noneРаботает в ГЛАВНОМ мире точного целевого фрейма без внедрения возможностей GM.
Одно или несколько явных @grantsРаботает в детерминированном изолированном мире User Script; соединяются только запрошенные возможности.
No @grant метаданныеУстаревший режим совместимости с MAIN-world сохраняется для существующих скриптов Social Browser.

Полный пример

Небольшой скрипт, объединяющий хранилище, стили, команды меню и буфер обмена.

Этот пример намеренно остается небольшим. Он запоминает, включено ли выделение, добавляет одно правило стиля, позволяет пользователю переключать его из меню User Script и копирует видимое значение страницы только по запросу.

JavaScript · полный User Script
// ==UserScript==// @name Helpful order-page tools// @namespace https://example.com/my-scripts// @version 1.0.0// @match https://example.com/orders/*// @grant GM_getValue// @grant GM_setValue// @grant GM_addStyle// @grant GM_registerMenuCommand// @grant GM_setClipboard// ==/UserScript== (() => { 'use strict';  GM_addStyle(` .sb-order-highlight { outline: 2px solid currentColor; font-weight: 700; } `);  const applyHighlight = () => { const enabled = GM_getValue('highlightEnabled', true); document.querySelectorAll('.order-total').forEach((element) => { element.classList.toggle('sb-order-highlight', enabled); }); };  GM_registerMenuCommand('Toggle order highlighting', () => { const current = GM_getValue('highlightEnabled', true); GM_setValue('highlightEnabled', !current); applyHighlight(); });  GM_registerMenuCommand('Copy current order ID', () => { const orderId = document.querySelector('.order-id')?.textContent?.trim(); if (orderId) { GM_setClipboard(orderId, 'text'); } });  applyHighlight();})();

Примечание о совместимости

Что в этом руководстве рассматривается как поддерживаемый контракт GM

В этом руководстве основное внимание уделяется возможностям, которые являются частью текущего явного описания Social Browser. @grant мост: хранилище, прослушиватели изменения значений, стили/элементы, привилегированные запросы, ресурсы, вкладки, уведомления, буфер обмена, загрузки, команды меню, GM_info and unsafeWindow.

Некоторые устаревшие/внутренние имена могут существовать для обратной совместимости, но они намеренно не представлены здесь как рекомендуемые общедоступные API до тех пор, пока они не станут частью явного контракта возможностей. Это позволяет новым сценариям оставаться на стабильном пути, а не обучать случайным деталям реализации.

Откройте краткую справку по User Scripts.Открыть при необходимости

Возможности скриптов в Social Browser

CapabilityЦель
Имя / титулЧетко определите сценарий.
Разрешено URLsВыберите, где он может работать.
Исключено URLsБлокировать выполнение определенных страниц.
JavaScriptДобавьте логику и поведение страницы.
CSSИзменить внешний вид страницы.
HTMLДобавьте небольшие элементы интерфейса страницы.
Видимость менюУправляйте тем, будет ли оно отображаться как действие сценария, инициируемое пользователем.
Объем окна/рамкиВыберите, какой контекст документа получит сценарий.
Автоматическое исполнениеАвтоматический запуск на соответствующих страницах.
Выполнение этапа предварительной загрузкиНачните раньше, когда этого потребует сценарий.
Импорт из файла / URLПеренесите существующие скрипты в менеджер.
Общие метаданные User ScriptИспользуйте знакомые соглашения о метаданных, если они поддерживаются.

Глоссарий

User Script
JavaScript, опционально с CSS/HTML, который запускается на выбранных страницах браузера.
Правило совпадения
Правило, ограничивающее получение скрипта URLs.
DOM
Объектное представление страницы в браузере, которое JavaScript может читать и изменять.
Событие
Сигнал страницы, такой как щелчок или изменение ввода.
Рамка
Документ, встроенный в другую страницу.
Предварительная загрузка
Более ранний этап выполнения, используемый, когда обычное время страницы слишком позднее для конкретной необходимости.
Профиль
Постоянная изолированная среда Social Browser с собственным состоянием браузера.

Контрольный список для начинающих

  • Я могу объяснить, что такое User Script.
  • Я создал и отключил тестовый скрипт.
  • Я могу ограничить сценарий правильным URLs.
  • Я могу найти и изменить простой элемент страницы.
  • Я знаю, когда CSS достаточно.
  • Я проверяю импортированный код перед его включением.
  • Я могу использовать консоль для отладки скрипта.

Расширенный контрольный список

  • Я придерживаюсь узких правил проведения матчей.
  • Я понимаю динамические страницы и ограниченные наблюдатели.
  • Я намеренно отношусь к хранилищу и доступу к сети.
  • Я выбираю объем и время кадра не просто так.
  • Я тестирую сценарии в предполагаемом контексте Profile.
  • Я знаю, когда Automation Studio — лучший инструмент.
Откройте общие вопросы User ScriptОткрыть при необходимости
Нужно ли мне быть разработчиком JavaScript?

Нет. Небольшим полезным сценариям часто требуется только базовый выбор DOM, события и простые условия. Узнайте больше JavaScript, когда этого требует реальный вариант использования.

Может ли User Script включать CSS и HTML?

Да. Система User Script Social Browser может включать JavaScript и, в зависимости от сценария, настройки CSS и HTML.

Могу ли я импортировать существующий User Scripts?

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

User Scripts — это то же самое, что Automation Studio?

Нет. User Scripts лучше всего подходит для кода, который живет на соответствующих страницах. Automation Studio предназначен для упорядоченных рабочих процессов, таргетинга Profile, политики выполнения, планирования, проверки и восстановления. Они могут дополнять друг друга.

Могут ли сценарии работать в разных Profiles?

User Scripts работают в контекстах страниц браузера. Тестируйте и управляйте ими в предназначенном Social Browser Profile, поскольку профили могут иметь разные сеансы, контент и состояние браузера.

Какой самый безопасный способ установить скрипт из Интернета?

Узнайте источник, прочитайте метаданные, проверьте код, проверьте область действия URL и поведение сети/хранилища, а затем протестируйте контролируемый Profile перед важным использованием.

Готовы попробовать?

Сделайте одну страницу лучше с помощью крошечного скрипта.

Загрузите Social Browser, создайте один тест Profile, добавьте небольшой User Script и сделайте его достаточно простым, чтобы можно было объяснить каждую строку.