← Все статьи

API и хелперы

window.JZ: хелперы для управления кнопками, слайдерами и Output Console из кода

На мгновение забудь, что JustZix внедряет CSS и JS на каждую страницу. Сосредоточься на том, что каждое действие — кнопка, слайдер, select, toggle3, input, textarea — это живой DOM-элемент, которым ты можешь управлять из другого кода. Нужны два отдельных пространства имён в MAIN world: window.JZ (хелперы действий) и window.JUSTZIX (логгер). У каждого свой жизненный цикл, своя цель, и они намеренно не смешиваются.

Почему два пространства имён, а не одно

Логгер (только запись, диспатч в Output Console) и адресуемость DOM (чтение/манипуляция элементами, которые уже живут в DOM страницы) — это две разные семантики. Упаковать их вместе означало бы смешать ответственности. Пользователь, читающий код, видит JUSTZIX.log(...) и знает: «это логгер». Видит document.querySelector('[data-jz-action-id="x"]') и знает: «это DOM-запрос». Кроме того — нативный DOM API + data-* атрибуты всегда выигрывают у проприетарной обёртки (работает с инспектором DevTools, со сторонними библиотеками, с «копировать-вставить» из интернета).

Пространство имёнНазначениеРиск конфликта
window.JUSTZIXЛоггер — log/warn/error/info/debug в Output ConsoleБрендовое имя = пренебрежимо малый риск конфликта. Работает везде.
window.__JUSTZIX__Алиас для того же объекта (обратная совместимость с v2.13.72-75)Всегда установлен, всегда работает.
window.JZХелперы действий — click/value/setValue/action для data-jz-action-*Может быть занят страницей (например, Google Ads владеет window.JZ). Запасной вариант: document.querySelector('[data-jz-action-id="..."]').

Идемпотентно — установка управляется по версии (_jzVersion для JZ, флаг хука для JUSTZIX), так что обновления расширения не перезаписывают пространства имён посреди сессии.

Полная поверхность API

// ============================================================
// window.JZ — Хелперы действий
// Работает с элементами data-jz-action-id в DOM.
// Может быть занят скриптами страницы → запасной вариант: нативный DOM-запрос.
// ============================================================
JZ.action(labelOrId)     // Элемент по метке ИЛИ id. Регистронезависимо для метки.
JZ.actionById(id)        // Элемент по data-jz-action-id. Нет фолбэка на метку.
JZ.actions()             // Массив всех action-элементов в DOM.
JZ.labels()              // Массив меток (оригинальный регистр).
JZ.click(labelOrId)      // Программный клик. Для <select> выбирает первую опцию.
                          // Возвращает true/false.
JZ.value(labelOrId)      // Текущее значение действия (string или null).
JZ.setValue(labelOrId, value)  // Программный сеттер + диспатч input и change.
JZ.bars()                // Массив всех .jz-actions-bar в DOM.
JZ.barById(id)           // Панель по data-jz-bar-id.
JZ.floatingBtn()         // Элемент плавающей кнопки JustZix (когда активна).

// ============================================================
// window.JUSTZIX — Логгер (с v2.13.73, основной алиас с v2.13.76)
// Диспатчит в Output Console (kind='jz'); НЕ перенаправляет в нативный console.*.
// Брендовое имя = пренебрежимо малый риск конфликта. Работает везде.
// ============================================================
JUSTZIX.log(...args)
JUSTZIX.warn(...args)
JUSTZIX.error(...args)
JUSTZIX.info(...args)
JUSTZIX.debug(...args)

// Алиасы того же API:
window.__JUSTZIX__       // всегда установлен (обратная совместимость с v2.13.72-75)
window.JZ                // тоже, только когда не занят — более короткий ярлык

// Запасной вариант, когда window.JZ занят страницей (например, Google Ads):
// → нет эквивалента JUSTZIX.click(); используй нативный DOM.
document.querySelector('[data-jz-action-id="..."]').click();

Сценарий 1 — кнопка нажимает другую кнопку

У тебя есть действия «Login → Dashboard → Статистика». Три отдельные кнопки на панели действий. Добавь четвёртую «🚀 Quick», которая выполняет все три по очереди:

// Действие BUTTON «Quick» — поле кода:
JZ.click('Login');
await new Promise(r => setTimeout(r, 800));
JZ.click('Dashboard');
await new Promise(r => setTimeout(r, 500));
JZ.click('Статистика');
JUSTZIX.log('Поток Quick завершён — 3 клика в 1');

Бонус: этот скрипт ничего не знает о странице, он знает только свои действия JustZix. Меняй селекторы внутри «Login» / «Dashboard» — «Quick» продолжает работать, потому что вызывает их по метке.

Сценарий 2 — слайдер управляет CSS-переменной

Действие SLIDER «Яркость» (диапазон 50-150, по умолчанию 100). В его поле «Code»:

// Слайдер выполняет этот код при каждом изменении.
// `value` — это extraVar, внедряемая расширением (с v2.12.2).
document.documentElement.style.setProperty('--brightness', value + '%');

Теперь в другом действии (BUTTON «Reset») можно программно установить значение слайдера:

JZ.setValue('Яркость', 100);  // Слайдер прыгает на 100, CSS-переменная обновлена, яркость восстановлена.
JUSTZIX.log('Яркость восстановлена на 100%');

То же касается TOGGLE3 (трёхпозиционные переключатели вроде «Dev / Staging / Prod»): JZ.setValue('Окружение', 'staging') активирует это конкретное состояние и выполняет его код.

Сценарий 3 — Output Console как «блокнот»

Output Console (с v2.13.66) — это pane, перехватывающий весь вывод console.log со страницы. Страницы вроде Gmail забивают консоль сотнями строк в секунду. Фильтры по строкам помогают, но есть приём лучше: пиши только свои сообщения через JUSTZIX.log, затем переведи pane в режим [J] (Just JustZix).

// В действии «Проверка корзины»: логируй только ТВОИ сообщения, без шума страницы.
const items = document.querySelectorAll('.cart-item');
JUSTZIX.log(`В корзине ${items.length} товаров`);
items.forEach((it, i) => {
  const price = parseFloat(it.querySelector('.price')?.textContent || 0);
  JUSTZIX.log(`  [${i}] ${it.dataset.sku} — $${price}`);
});
const total = [...items].reduce((s, it) => s + parseFloat(it.querySelector('.price')?.textContent || 0), 0);
JUSTZIX.log(`Итого: $${total}`);

Pane Output Console в режиме [J] показывает ТОЛЬКО эти 3 строки — полностью чисто, идеально для QA-тулбара или контекста, обращённого к клиенту.

А если у страницы уже есть window.JZ?

Логгер работает всегда — у JUSTZIX.log() брендовое имя (пренебрежимо малый риск конфликта), и он основной. Кроме того window.__JUSTZIX__ всегда установлен как запасной алиас. Конфликт по window.JZ касается только хелперов действий — и даже тогда у тебя есть нативный выход.

Некоторые сайты (например, Google Ads) имеют свой window.JZ. JustZix это обнаруживает: если window.JZ уже существует при установке логгера, расширение не перезаписывает API страницы и сообщает об этом в приветственном сообщении Output Console. Короткий ярлык JZ остаётся зарезервированным за страницей — используй JUSTZIX для логирования и нативный DOM для действий:

// Логгер: всегда JUSTZIX (работает даже когда JZ занят страницей)
JUSTZIX.log('Корзина обработана');

// Клик по действию: когда window.JZ занят → используй нативный DOM вместо JZ.click()
document.querySelector('[data-jz-action-id="actionId"]').click();
// Или по data-jz-key (метка в верхнем регистре):
document.querySelector('.jz-actions-bar [data-jz-key="LOGIN"]').click();

Это намеренный дизайн: data-jz-action-* + querySelector — нативный паттерн — работает с инспектором DevTools, со сторонними библиотеками, с «копировать-вставить» из интернета. JZ.click() — синтаксический сахар — необязательный уровень косвенности, который можно пропустить, когда он недоступен.

Ловушки

Что делать дальше

Это завершает мини-серию об окнах JustZix во фронтенде:

Всё вместе — это мини-IDE внутри каждой вкладки браузера, с мини-API для управления твоими кнопками. Установи JustZix и попробуй сам — полностью бесплатно, без аккаунта, без сервера.

Оцени эту статью

Оценок пока нет — оцени первым.

Попробуй сам

Установи JustZix и вставь любой сниппет из этой статьи. Две минуты от нуля до работающего правила на всех твоих устройствах.

Получить JustZix

Возможности · Как это работает · Примеры · Применение