Программный доступ (Mobius)

Эта статья — для тех, кто умеет писать на JavaScript. Если вам достаточно ссылок и кнопок, оставайтесь на атрибуте data-mobius из статьи С чего начать — он покрывает почти все задачи.

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

Объект Mobius

Внутри блока доступен глобальный объект Mobius. Через него можно вызвать любую команду и получить результат:

HTML
<button onclick="Mobius.basket.add('15', 2)">Добавить 2 штуки</button>

Каждая команда возвращает «обещание» (Promise) — то есть вы можете дождаться ответа и среагировать на него:

HTML
<button id="buy">Купить</button> <script> document.getElementById('buy').addEventListener('click', async () => { const result = await Mobius.basket.add('15', 1); if (result.ok) { Mobius.notification.toast({ title: 'Добавлено', message: 'Товар в корзине' }); } }); </script>

Имена команд те же, что в справочнике: точка в названии превращается в обращение к объекту. basket.addMobius.basket.add(...), catalog.openProductMobius.catalog.openProduct(...).

Данные о пользователе и приложении

Сразу при загрузке блока доступен объект Mobius.context — снимок текущего состояния:

Поле Что содержит
platform ios или android
isAuthorized Вошёл ли пользователь
user Имя, телефон, e-mail (или пусто, если не вошёл)
region Текущий регион (id и title)
deliveryMode Режим доставки
theme.colors Цвета бренда
locale Язык

Пример — приветствие по имени:

HTML
<p id="hello"></p> <script> const name = Mobius.context.user ? Mobius.context.user.name : 'гость'; document.getElementById('hello').textContent = 'Здравствуйте, ' + name + '!'; </script>

Реакция на изменения

Блок может обновляться сам, когда что-то меняется в приложении. Подпишитесь на событие через Mobius.on:

Событие Когда срабатывает Что передаёт
basket:changed Изменилась корзина basketCount — число товаров
auth:changed Пользователь вошёл или вышел isAuthorized
region:changed Сменился регион id региона
HTML
<p>Товаров в корзине: <b id="count">0</b></p> <script> Mobius.on('basket:changed', data => { document.getElementById('count').textContent = data.basketCount; }); </script>

Полезные мелочи

  • Mobius.invoke('basket.add', { id: '15', qty: 1 }) — вызвать команду по её полному имени. Удобно, когда имя команды собирается из переменной.
  • Mobius.has('basket.add') — проверить, поддерживается ли команда в этой версии приложения. Помогает делать блоки, которые не ломаются на старых версиях.
  • Mobius.version — версия моста.

Обработка ошибок

Если команда не выполнилась (например, не передан обязательный параметр), обещание завершится ошибкой. Оборачивайте такие вызовы в try / catch:

HTML
<script> async function setMoscow() { try { await Mobius.region.set({ id: '77', title: 'Москва' }); Mobius.notification.toast({ title: 'Регион изменён' }); } catch (e) { Mobius.notification.toast({ title: 'Не удалось', type: 'error' }); } } </script>

Что дальше

Обновлено 10.07.2026 09:36
Помогла ли статья?