Программный доступ (Mobius)
Эта статья — для тех, кто умеет писать на JavaScript. Если вам достаточно ссылок и кнопок, оставайтесь на атрибуте data-mobius из статьи С чего начать — он покрывает почти все задачи.
Программный доступ работает в блоках на главном экране, в карточке товара и в историях. В статьях, новостях и на статических страницах он недоступен — там используйте обычные ссылки и кнопки.
Объект Mobius
Внутри блока доступен глобальный объект Mobius. Через него можно вызвать любую команду и получить результат:
<button onclick="Mobius.basket.add('15', 2)">Добавить 2 штуки</button>
Каждая команда возвращает «обещание» (Promise) — то есть вы можете дождаться ответа и среагировать на него:
<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.add → Mobius.basket.add(...), catalog.openProduct → Mobius.catalog.openProduct(...).
Данные о пользователе и приложении
Сразу при загрузке блока доступен объект Mobius.context — снимок текущего состояния:
| Поле | Что содержит |
|---|---|
platform |
ios или android |
isAuthorized |
Вошёл ли пользователь |
user |
Имя, телефон, e-mail (или пусто, если не вошёл) |
region |
Текущий регион (id и title) |
deliveryMode |
Режим доставки |
theme.colors |
Цвета бренда |
locale |
Язык |
Пример — приветствие по имени:
<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 региона |
<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:
<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>
Что дальше
- Справочник команд — полный список команд.
- Примеры — готовые блоки, в том числе с живым счётчиком корзины.