[{"data":1,"prerenderedAt":1790},["ShallowReactive",2],{"navigation":3,"-docs-working-with-the-rest-api-tools-browser":459,"-docs-working-with-the-rest-api-tools-browser-description":1779},[4],{"title":5,"path":6,"stem":7,"children":8,"page":47},"Docs","\u002Fdocs","docs",[9,78,351],{"title":10,"path":11,"stem":12,"children":13,"restApiVersion":15,"category":15,"description":15,"badge":15},"Начало работы","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,17,48,63],{"title":10,"path":11,"stem":12,"restApiVersion":15,"category":15,"description":16,"badge":15},null,"Краткое руководство по работе с SDK для REST API Bitrix24",{"title":18,"path":19,"stem":20,"children":21,"page":47},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation",[22,27,32,37,42],{"title":23,"path":24,"stem":25,"restApiVersion":15,"category":15,"description":26,"badge":15},"Vue","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fvue","docs\u002F1.getting-started\u002F2.installation\u002F1.vue","Руководство по установке Bitrix24 JS SDK в приложениях Vue.",{"title":28,"path":29,"stem":30,"restApiVersion":15,"category":15,"description":31,"badge":15},"Nuxt","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt","docs\u002F1.getting-started\u002F2.installation\u002F2.nuxt","Руководство по установке Bitrix24 JS SDK в приложениях Nuxt.",{"title":33,"path":34,"stem":35,"restApiVersion":15,"category":15,"description":36,"badge":15},"React","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Freact","docs\u002F1.getting-started\u002F2.installation\u002F3.react","Руководство по установке Bitrix24 JS SDK в приложениях React.",{"title":38,"path":39,"stem":40,"restApiVersion":15,"category":15,"description":41,"badge":15},"Node.js","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnodejs","docs\u002F1.getting-started\u002F2.installation\u002F4.nodejs","Руководство по установке Bitrix24 JS SDK в приложениях Node.js.",{"title":43,"path":44,"stem":45,"restApiVersion":15,"category":15,"description":46,"badge":15},"UMD","\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fumd","docs\u002F1.getting-started\u002F2.installation\u002F5.umd","Руководство по использованию UMD-версии Bitrix24 JS SDK в ваших приложениях.",false,{"title":49,"restApiVersion":15,"category":15,"description":15,"badge":15,"shadow":47,"path":50,"stem":51,"children":52,"page":47},"Migration","\u002Fdocs\u002Fgetting-started\u002Fmigration","docs\u002F1.getting-started\u002F3.migration",[53,58],{"title":54,"path":55,"stem":56,"restApiVersion":15,"category":15,"description":57,"badge":15},"v0 → v1","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv1","docs\u002F1.getting-started\u002F3.migration\u002F1.v1","Подробное руководство по миграции приложения с Bitrix24 JS SDK v0 на Bitrix24 JS SDK v1.",{"title":59,"path":60,"stem":61,"restApiVersion":15,"category":15,"description":62,"badge":15},"v2 → v3","\u002Fdocs\u002Fgetting-started\u002Fmigration\u002Fv3","docs\u002F1.getting-started\u002F3.migration\u002F2.v3","Как уйти с устаревшей REST-поверхности, которая удаляется в Bitrix24 JS SDK 3.0.0.",{"title":64,"restApiVersion":15,"category":15,"description":15,"badge":15,"path":65,"stem":66,"children":67,"page":47},"AI-инструменты","\u002Fdocs\u002Fgetting-started\u002Fai","docs\u002F1.getting-started\u002F7.ai",[68,73],{"title":69,"path":70,"stem":71,"restApiVersion":15,"category":15,"description":72,"badge":15},"Навыки","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fskills","docs\u002F1.getting-started\u002F7.ai\u002F1.skills","Узкоспециализированные skill-файлы для AI-агентов разработчика, работающих с @bitrix24\u002Fb24jssdk.",{"title":74,"path":75,"stem":76,"restApiVersion":15,"category":15,"description":77,"badge":15},"LLMs.txt","\u002Fdocs\u002Fgetting-started\u002Fai\u002Fllms-txt","docs\u002F1.getting-started\u002F7.ai\u002F2.llms-txt","Как сделать, чтобы AI-инструменты вроде Cursor, Windsurf, GitHub Copilot, ChatGPT и Claude понимали методы, инструменты и лучшие практики Bitrix24 JS SDK.",{"title":79,"path":80,"stem":81,"children":82,"restApiVersion":15,"category":15,"description":15,"badge":15},"Работа с REST API","\u002Fdocs\u002Fworking-with-the-rest-api","docs\u002F2.working-with-the-rest-api\u002F0.index",[83,86,93,98,103,107,112,116,121,126,130,135,140,145,150,155,160,165,170,175,179,184,189,194,200,205,210,215,220,225,230,235,240,245,251,256,261,267,272,277,282,287,293,299,305,310,315,320,326,331,336,341,346],{"title":84,"path":80,"stem":81,"restApiVersion":15,"category":15,"description":85,"badge":15},"Введение","Обзор возможностей SDK для работы с REST API Bitrix24",{"title":87,"path":88,"stem":89,"restApiVersion":90,"category":91,"description":92,"badge":15},"Call","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver2","rest-api-ver2","actions","Метод для вызовов REST API Bitrix24 версии 2.",{"title":87,"path":94,"stem":95,"restApiVersion":96,"category":91,"description":97,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F1.call-rest-api-ver3","rest-api-ver3","Метод для вызовов REST API Bitrix24 версии 3.",{"title":99,"path":100,"stem":101,"restApiVersion":90,"category":91,"description":102,"badge":15},"CallList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver2","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 2.",{"title":99,"path":104,"stem":105,"restApiVersion":96,"category":91,"description":106,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcall-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.call-list-rest-api-ver3","Метод для быстрого получения всех данных из list-методов REST API Bitrix24 версии 3.",{"title":108,"path":109,"stem":110,"restApiVersion":90,"category":91,"description":111,"badge":15},"FetchList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver2","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 2 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":108,"path":113,"stem":114,"restApiVersion":96,"category":91,"description":115,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffetch-list-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F2.fetch-list-rest-api-ver3","Возвращает AsyncGenerator, позволяющий обрабатывать данные из list-методов REST API Bitrix24 версии 3 по мере поступления, не загружая весь массив в память сразу. Особенно полезно при работе с очень большими объёмами данных.",{"title":117,"path":118,"stem":119,"restApiVersion":15,"category":117,"description":120,"badge":15},"B24Hook","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhook","docs\u002F2.working-with-the-rest-api\u002F20.hook","Серверная точка входа для работы с REST API Bitrix24 через входящий вебхук (постоянный токен).",{"title":122,"path":123,"stem":124,"restApiVersion":90,"category":91,"description":125,"badge":15},"Batch","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver2","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 2. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":122,"path":127,"stem":128,"restApiVersion":96,"category":91,"description":129,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F3.batch-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3. Позволяет выполнить до 50 команд в одном API-вызове.",{"title":84,"path":131,"stem":132,"restApiVersion":15,"category":133,"description":134,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe","docs\u002F2.working-with-the-rest-api\u002F30.frame","B24Frame","Предназначен для управления приложениями Bitrix24, работающими внутри placement-iframe. Наследуется от AbstractB24 и предоставляет менеджеры для аутентификации, обмена сообщениями с родительским окном, слайдеров, диалогов, placement и опций.",{"title":136,"path":137,"stem":138,"restApiVersion":15,"category":133,"description":139,"badge":15},"Инициализация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-initialize-b24-frame","docs\u002F2.working-with-the-rest-api\u002F30.frame-initialize-b24-frame","Функция предназначена для инициализации B24Frame",{"title":141,"path":142,"stem":143,"restApiVersion":15,"category":133,"description":144,"badge":15},"Авторизация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-auth","docs\u002F2.working-with-the-rest-api\u002F31.frame-auth","Предназначен для управления аутентификацией в приложениях Bitrix24. Обрабатывает данные аутентификации, полученные от родительского окна, и предоставляет методы для их обновления и получения.",{"title":146,"path":147,"stem":148,"restApiVersion":15,"category":133,"description":149,"badge":15},"Диалог","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-dialog","docs\u002F2.working-with-the-rest-api\u002F31.frame-dialog","Оборачивает системные диалоги BX24 (выбор пользователя, выбор прав доступа, выбор CRM-сущности), чтобы их можно было открывать изнутри iframe приложения Bitrix24.",{"title":151,"path":152,"stem":153,"restApiVersion":15,"category":133,"description":154,"badge":15},"Опции","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-options","docs\u002F2.working-with-the-rest-api\u002F31.frame-options","Используется для управления настройками приложения и пользователя в приложении Bitrix24. Позволяет инициализировать данные, получать и устанавливать опции через сообщения родительскому окну.",{"title":156,"path":157,"stem":158,"restApiVersion":15,"category":133,"description":159,"badge":15},"Родительское окно","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-parent","docs\u002F2.working-with-the-rest-api\u002F31.frame-parent","Предоставляет методы для управления родительским окном приложения в Bitrix24, включая изменение размера окна, управление прокруткой, инициацию звонков и открытие мессенджера.",{"title":161,"path":162,"stem":163,"restApiVersion":15,"category":133,"description":164,"badge":15},"Placement","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-placement","docs\u002F2.working-with-the-rest-api\u002F31.frame-placement","Используется для управления placement виджетов в приложении Bitrix24.",{"title":166,"path":167,"stem":168,"restApiVersion":15,"category":133,"description":169,"badge":15},"Слайдер","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fframe-slider","docs\u002F2.working-with-the-rest-api\u002F31.frame-slider","Предоставляет методы для работы со слайдерами в приложении Bitrix24. Позволяет открывать и закрывать слайдеры, а также управлять их содержимым.",{"title":171,"path":172,"stem":173,"restApiVersion":90,"category":91,"description":174,"badge":15},"BatchByChunk","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver2","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver2","Метод для выполнения пакетных запросов с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":171,"path":176,"stem":177,"restApiVersion":96,"category":91,"description":178,"badge":15},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Fbatch-by-chunk-rest-api-ver3","docs\u002F2.working-with-the-rest-api\u002F4.batch-by-chunk-rest-api-ver3","Метод для выполнения пакетных запросов к REST API Bitrix24 версии 3 с автоматическим разбиением на чанки для любого числа команд. Автоматически делит большие наборы команд на батчи по 50 и выполняет их последовательно. Используйте только массивы кортежей или массивы объектов.",{"title":180,"path":181,"stem":182,"restApiVersion":15,"category":180,"description":183,"badge":15},"B24OAuth","\u002Fdocs\u002Fworking-with-the-rest-api\u002Foauth","docs\u002F2.working-with-the-rest-api\u002F40.oauth","Серверная точка входа для работы с REST API Bitrix24 по access token OAuth 2.0 (с автоматическим обновлением).",{"title":185,"path":186,"stem":187,"restApiVersion":15,"category":15,"description":188,"badge":15},"Выбор метода","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fchoosing-the-right-method","docs\u002F2.working-with-the-rest-api\u002F5.choosing-the-right-method","Руководство по выбору между Call, CallList, FetchList, Batch и BatchByChunk в REST API v2 и v3.",{"title":190,"path":191,"stem":192,"restApiVersion":15,"category":15,"description":193,"badge":15},"Фильтрация","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ffiltering","docs\u002F2.working-with-the-rest-api\u002F5.filtering","Справочник по построению параметров фильтра в Bitrix24 REST API v2 (префиксные операторы) и v3 (массив троек), включая формат дат и правило отбрасывания order.",{"title":195,"path":196,"stem":197,"restApiVersion":15,"category":198,"description":199,"badge":15},"B24HelperManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper","docs\u002F2.working-with-the-rest-api\u002F50.helper","Helper","Агрегирующий менеджер, который загружает данные профиля, приложения, оплаты, лицензии, валют и опций одним батч-запросом REST, а также подключает Pull-клиент.",{"title":201,"path":202,"stem":203,"restApiVersion":15,"category":198,"description":204,"badge":15},"useB24Helper","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-use-b24-helper","docs\u002F2.working-with-the-rest-api\u002F51.helper-use-b24-helper","Основанный на замыкании composable, который владеет единственным экземпляром B24HelperManager и предоставляет хелперы жизненного цикла (init \u002F destroy \u002F связка с Pull-клиентом).",{"title":206,"path":207,"stem":208,"restApiVersion":15,"category":198,"description":209,"badge":15},"ProfileManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-profile-manager","docs\u002F2.working-with-the-rest-api\u002F52.helper-profile-manager","Разобранный ответ REST-метода `profile`: id, имя, фамилия, пол, фото, часовой пояс, флаг администратора.",{"title":211,"path":212,"stem":213,"restApiVersion":15,"category":198,"description":214,"badge":15},"AppManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-app-manager","docs\u002F2.working-with-the-rest-api\u002F53.helper-app-manager","Разобранный ответ REST-метода `app.info`: id приложения, код, версия, статус, флаг установки.",{"title":216,"path":217,"stem":218,"restApiVersion":15,"category":198,"description":219,"badge":15},"PaymentManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-payment-manager","docs\u002F2.working-with-the-rest-api\u002F54.helper-payment-manager","Статус оплаты приложения Bitrix24 — извлекается из `app.info`.",{"title":221,"path":222,"stem":223,"restApiVersion":15,"category":198,"description":224,"badge":15},"LicenseManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-license-manager","docs\u002F2.working-with-the-rest-api\u002F55.helper-license-manager","Информация о лицензии Bitrix24 из `app.info` — и автоматическая перенастройка менеджера ограничений под соответствующий тарифный план.",{"title":226,"path":227,"stem":228,"restApiVersion":15,"category":198,"description":229,"badge":15},"CurrencyManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-currency-manager","docs\u002F2.working-with-the-rest-api\u002F56.helper-currency-manager","Каталог валют, кэшируемый в памяти — базовая валюта, форматтеры для каждой валюты и форматтер числа в строку.",{"title":231,"path":232,"stem":233,"restApiVersion":15,"category":198,"description":234,"badge":15},"OptionsManager","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fhelper-options-manager","docs\u002F2.working-with-the-rest-api\u002F57.helper-options-manager","Типизированный доступ к `app.option.get` \u002F `user.option.get`, плюс save(), который батчит `*.option.set` с необязательным Pull-уведомлением.",{"title":236,"path":237,"stem":238,"restApiVersion":15,"category":15,"description":239,"badge":15},"Ошибки","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferrors","docs\u002F2.working-with-the-rest-api\u002F6.errors","Справочник кодов SdkError и AjaxError, выбрасываемых SDK, плюс коды ошибок REST Bitrix24, которые через них проявляются.",{"title":241,"path":242,"stem":243,"restApiVersion":15,"category":241,"description":244,"badge":15},"Pull","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fpull","docs\u002F2.working-with-the-rest-api\u002F60.pull","Поток сообщений в реальном времени от Bitrix24 к вашему приложению — WebSocket как основной канал, long-polling как запасной. Только для фрейма.",{"title":246,"path":247,"stem":248,"restApiVersion":15,"category":249,"description":250,"badge":15},"Logger","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger","docs\u002F2.working-with-the-rest-api\u002F66.logger","logger","Логгер, вдохновлённый PHP Monolog, предоставляет структурированную систему логирования с поддержкой каналов, обработчиков, процессоров и форматтеров. Реализация следует принципам PSR-3 и паттерну цепочки ответственности.",{"title":252,"path":253,"stem":254,"restApiVersion":15,"category":249,"description":255,"badge":15},"Telegram","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogger-telegram","docs\u002F2.working-with-the-rest-api\u002F66.logger-telegram","Отправка логов в Telegram",{"title":257,"path":258,"stem":259,"restApiVersion":15,"category":15,"description":260,"badge":15},"Обнаружение v3-методов","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fdiscovering-v3-methods","docs\u002F2.working-with-the-rest-api\u002F7.discovering-v3-methods","Используйте rest.documentation.openapi, чтобы получить собственный машиночитаемый список всех доступных методов REST API v3 портала — источник истины, на который SDK опирается вместо захардкоженного allowlist. Особенно полезно для AI-агентов и кодогенерации.",{"title":262,"path":263,"stem":264,"restApiVersion":15,"category":265,"description":266,"badge":15},"AjaxResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-ajax-result","docs\u002F2.working-with-the-rest-api\u002F70.core-ajax-result","Core","Специализированный Result, возвращаемый каждым REST-хелпером. Предоставляет `isMore() \u002F getNext() \u002F getTotal() \u002F getStatus()` для постраничных ответов и неизменяемые данные.",{"title":268,"path":269,"stem":270,"restApiVersion":15,"category":265,"description":271,"badge":15},"Http","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-http","docs\u002F2.working-with-the-rest-api\u002F70.core-http","Низкоуровневый интерфейс транспорта, возвращаемый `b24.getHttpClient(version)`. Прямой доступ к axios-клиентам, параметрам ограничений, статистике и сбросу.",{"title":273,"path":274,"stem":275,"restApiVersion":15,"category":265,"description":276,"badge":15},"B24LangList","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-lang-list","docs\u002F2.working-with-the-rest-api\u002F70.core-lang-list","Enum языков интерфейса облачного Bitrix24 плюс карта локалей BCP-47.",{"title":278,"path":279,"stem":280,"restApiVersion":15,"category":265,"description":281,"badge":15},"RequestIdGenerator","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-request-id-generator","docs\u002F2.working-with-the-rest-api\u002F70.core-request-id-generator","Реализация `IRequestIdGenerator` по умолчанию. Генерирует request id в формате UUID v7 и предоставляет имена HTTP-заголовка \u002F query-параметра, используемые SDK.",{"title":283,"path":284,"stem":285,"restApiVersion":15,"category":265,"description":286,"badge":15},"Result","\u002Fdocs\u002Fworking-with-the-rest-api\u002Fcore-result","docs\u002F2.working-with-the-rest-api\u002F70.core-result","Обобщённый результат операции с флагом успеха, данными и картой ошибок. Аналог \\\\Bitrix\\\\Main\\\\Result из Bitrix Framework.",{"title":288,"path":289,"stem":290,"restApiVersion":15,"category":291,"description":292,"badge":15},"Лимитеры","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flimiters","docs\u002F2.working-with-the-rest-api\u002F77.limiters","limiters","Система ограничений предоставляет комплексный механизм управления частотой запросов, временем выполнения операций и адаптивными задержками.",{"title":294,"path":295,"stem":296,"restApiVersion":15,"category":297,"description":298,"badge":15},"Логирование и редактирование","\u002Fdocs\u002Fworking-with-the-rest-api\u002Flogging","docs\u002F2.working-with-the-rest-api\u002F78.logging","logging","Что SDK редактирует автоматически до того, как информация о запросе попадёт в логгер или AjaxError, что он не редактирует, и как подключить кастомный логгер через setLogger(...) без повторного появления утечек учётных данных.",{"title":300,"path":301,"stem":302,"restApiVersion":15,"category":303,"description":304,"badge":15},"Browser","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-browser","docs\u002F2.working-with-the-rest-api\u002F80.tools-browser","tools","Дешёвый детектор user-agent \u002F платформы \u002F возможностей. Полезен для runtime-ветвлений во фронтенд-коде.",{"title":306,"path":307,"stem":308,"restApiVersion":15,"category":303,"description":309,"badge":15},"Text","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-text","docs\u002F2.working-with-the-rest-api\u002F80.tools-text","Утилиты для текста и дат — UUID v4 \u002F v7, кодирование \u002F декодирование HTML-сущностей, преобразования типов, хелперы регистра, `toDateTime` \u002F `toB24Format` на Luxon, форматирование чисел и конструктор query-строки.",{"title":311,"path":312,"stem":313,"restApiVersion":15,"category":303,"description":314,"badge":15},"Type","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type","docs\u002F2.working-with-the-rest-api\u002F80.tools-type","Runtime type guards — строки, числа, обычные объекты, массивы, DOM-узлы, Blob, FormData, формы JSON-RPC сообщений.",{"title":316,"path":317,"stem":318,"restApiVersion":15,"category":303,"description":319,"badge":15},"useFormatter","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-use-formatters","docs\u002F2.working-with-the-rest-api\u002F80.tools-use-formatters","Composable, возвращающий общие экземпляры `FormatterNumbers` и `FormatterIban`, преднастроенные спецификациями стран.",{"title":321,"path":322,"stem":323,"restApiVersion":15,"category":324,"description":325,"badge":15},"IResult","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-iresult","docs\u002F2.working-with-the-rest-api\u002F90.types-iresult","Types","Обобщённый интерфейс результата операции. Реализуется `Result\u003CT>` и (транзитивно) `AjaxResult\u003CT>`.",{"title":327,"path":328,"stem":329,"restApiVersion":15,"category":324,"description":330,"badge":15},"TypeB24","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftypes-type-b24","docs\u002F2.working-with-the-rest-api\u002F90.types-type-b24","Публичный контракт, реализуемый каждым классом-точкой входа (B24Frame, B24Hook, B24OAuth). Единый источник истины для поверхности SDK.",{"title":332,"path":333,"stem":334,"restApiVersion":15,"category":265,"description":335,"badge":15},"Телеметрия","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftelemetry","docs\u002F2.working-with-the-rest-api\u002F95.telemetry","Query-параметры request id, версии SDK и типа SDK, добавляемые к каждому REST-вызову Bitrix24.",{"title":337,"path":338,"stem":339,"restApiVersion":15,"category":265,"description":340,"badge":15},"Коды ошибок","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ferror-codes","docs\u002F2.working-with-the-rest-api\u002F96.error-codes","Каталог кодов ошибок, которые распознаёт SDK — разделённых на «hard» (выбрасываются) и «soft» (возвращаются как AjaxError внутри AjaxResult).",{"title":342,"path":343,"stem":344,"restApiVersion":15,"category":303,"description":345,"badge":15},"HealthCheck","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-health-check","docs\u002F2.working-with-the-rest-api\u002Ftools-health-check","Метод для проверки доступности REST API Bitrix24. Выполняет простой запрос к REST API для проверки работоспособности сервиса.",{"title":347,"path":348,"stem":349,"restApiVersion":15,"category":303,"description":350,"badge":15},"Ping","\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-ping","docs\u002F2.working-with-the-rest-api\u002Ftools-ping","Метод для измерения скорости ответа REST API Bitrix24. Выполняет тестовый запрос и возвращает время ответа в миллисекундах.",{"title":352,"path":353,"stem":354,"children":355,"restApiVersion":15,"category":15,"description":15,"badge":15},"Примеры","\u002Fdocs\u002Fexamples","docs\u002F99.examples\u002F0.index",[356,358,364,369,374,379,384,389,394,399,404,409,414,419,424,429,434,439,444,449,454],{"title":84,"path":353,"stem":354,"restApiVersion":15,"category":15,"description":357,"badge":15},"Рецепты, сочетающие SDK с реалистичными сценариями — аналитика CRM, массовые рассылки, AI-ассистенты, установка по OAuth и не только. Каждый рецепт — отдельный файл, удобный для копирования.",{"title":359,"path":360,"stem":361,"restApiVersion":15,"category":362,"description":363,"badge":15},"Аналитика CRM","\u002Fdocs\u002Fexamples\u002Fcrm-analytics","docs\u002F99.examples\u002F1.crm-analytics","examples","Стримит все сделки через actions.v2.fetchList.make, группирует по стадиям, печатает отчёт по воронке (количество, конверсия %, средний чек, win rate).",{"title":365,"path":366,"stem":367,"restApiVersion":15,"category":362,"description":368,"badge":15},"Сделки → CSV","\u002Fdocs\u002Fexamples\u002Fdashboard-deals-csv","docs\u002F99.examples\u002F1.dashboard-deals-csv","Стримит каждую сделку CRM, подходящую под фильтр по дате, в CSV-файл через вебхук и FetchListV2.",{"title":370,"path":371,"stem":372,"restApiVersion":15,"category":15,"description":373,"badge":15},"Список сущностей","\u002Fdocs\u002Fexamples\u002Fentity-list","docs\u002F99.examples\u002F10.entity-list","Рендерит постраничный список сущностей Bitrix24 с компонентами B24UI и SDK-действием callList.",{"title":375,"path":376,"stem":377,"restApiVersion":15,"category":362,"description":378,"badge":15},"Обработка ошибок","\u002Fdocs\u002Fexamples\u002Ferror-handling","docs\u002F99.examples\u002F10.error-handling","Демонстрирует четыре слоя ошибок (SdkError \u002F AjaxError \u002F сетевые \u002F soft) и настройки hardErrorCodes \u002F softErrorCodes \u002F retryOnNetworkError у менеджера ограничений.",{"title":380,"path":381,"stem":382,"restApiVersion":15,"category":362,"description":383,"badge":15},"Регистрация событий","\u002Fdocs\u002Fexamples\u002Fevent-registration","docs\u002F99.examples\u002F11.event-registration","CLI-инструмент — список, привязка и отвязка исходящих событий вебхуков Bitrix24 через event.get \u002F event.bind \u002F event.unbind. В паре с рецептом обработчика вебхуков.",{"title":385,"path":386,"stem":387,"restApiVersion":15,"category":362,"description":388,"badge":15},"Установка OAuth","\u002Fdocs\u002Fexamples\u002Foauth-install","docs\u002F99.examples\u002F12.oauth-install","Express-сервер, который обрабатывает события ONAPPINSTALL \u002F ONAPPUPDATE \u002F ONAPPUNINSTALL для маркетплейс-приложения Bitrix24, сохраняет токены по порталам и создаёт клиент B24OAuth по требованию с callback обновления, подключённым к хранилищу.",{"title":390,"path":391,"stem":392,"restApiVersion":15,"category":362,"description":393,"badge":15},"Скелет frame-приложения","\u002Fdocs\u002Fexamples\u002Fframe-app-skeleton","docs\u002F99.examples\u002F2.frame-app-skeleton","Минимально жизнеспособное iframe-приложение Bitrix24: рукопожатие init, установка заголовка, сохранение состояния приложения, открытие слайдера, чистое закрытие.",{"title":395,"path":396,"stem":397,"restApiVersion":15,"category":362,"description":398,"badge":15},"Массовые рассылки","\u002Fdocs\u002Fexamples\u002Fmass-messaging","docs\u002F99.examples\u002F2.mass-messaging","Фильтрует контакты в CRM, персонализирует шаблон, отправляет IM-уведомления ответственным менеджерам.",{"title":400,"path":401,"stem":402,"restApiVersion":15,"category":15,"description":403,"badge":15},"Мастер установки","\u002Fdocs\u002Fexamples\u002Fapp-installation-wizard","docs\u002F99.examples\u002F20.app-installation-wizard","Многошаговый процесс установки, который создаёт пользовательские поля, регистрирует placement-ы, финализирует установку и празднует конфетти.",{"title":405,"path":406,"stem":407,"restApiVersion":15,"category":362,"description":408,"badge":15},"Автоматизация задач","\u002Fdocs\u002Fexamples\u002Ftask-automation","docs\u002F99.examples\u002F3.task-automation","Опрашивает стадии сделок каждые 60 с. При отслеживаемом переходе создаёт задачу с описанием, дедлайном и приоритетом.",{"title":410,"path":411,"stem":412,"restApiVersion":15,"category":362,"description":413,"badge":15},"Вебхук CLI","\u002Fdocs\u002Fexamples\u002Fwebhook-cli-node","docs\u002F99.examples\u002F3.webhook-cli-node","Node-скрипт на 30 строк, который аутентифицируется на портале Bitrix24 через входящий вебхук и печатает вызывающего пользователя — полезно как первое, что вы запускаете после создания вебхука.",{"title":415,"path":416,"stem":417,"restApiVersion":15,"category":15,"description":418,"badge":15},"Экспорт Node + Hook","\u002Fdocs\u002Fexamples\u002Fnode-hook-company-export","docs\u002F99.examples\u002F30.node-hook-company-export","Экспорт компаний Bitrix24 в CSV-файл из чистого Node.js-скрипта через B24Hook.",{"title":420,"path":421,"stem":422,"restApiVersion":15,"category":362,"description":423,"badge":15},"Массовое обновление","\u002Fdocs\u002Fexamples\u002Fbulk-update-deals","docs\u002F99.examples\u002F4.bulk-update-deals","Переносит тысячи сделок CRM на новую стадию через BatchByChunkV2 — автоматическое разбиение на чанки, обработка частичных ошибок и одна строка прогресса.",{"title":425,"path":426,"stem":427,"restApiVersion":15,"category":362,"description":428,"badge":15},"Синхронизация ERP","\u002Fdocs\u002Fexamples\u002Ferp-sync","docs\u002F99.examples\u002F4.erp-sync","Двусторонняя синхронизация контактов между Bitrix24 и внешней ERP. Сопоставление по ИНН (основное) или email (запасное). Cron каждый час.",{"title":430,"path":431,"stem":432,"restApiVersion":15,"category":362,"description":433,"badge":15},"Файлы Диска","\u002Fdocs\u002Fexamples\u002Fdisk-files","docs\u002F99.examples\u002F5.disk-files","Список хранилищ и содержимого папок, создание подпапок, просмотр файлов. Загрузка файлов (multipart) намеренно вне области.",{"title":435,"path":436,"stem":437,"restApiVersion":15,"category":362,"description":438,"badge":15},"Подписка на Pull","\u002Fdocs\u002Fexamples\u002Fpull-subscribe-frame","docs\u002F99.examples\u002F5.pull-subscribe-frame","Открыть живой канал из frame-приложения Bitrix24 и реагировать на push-события через useB24Helper + Pull-клиент.",{"title":440,"path":441,"stem":442,"restApiVersion":15,"category":362,"description":443,"badge":15},"Telegram-бот","\u002Fdocs\u002Fexamples\u002Ftelegram-bot","docs\u002F99.examples\u002F6.telegram-bot","Опрашивает новые сделки CRM каждые две минуты; уведомляет Telegram-чат HTML-карточкой.",{"title":445,"path":446,"stem":447,"restApiVersion":15,"category":362,"description":448,"badge":15},"Обработчик вебхуков","\u002Fdocs\u002Fexamples\u002Fwebhook-handler","docs\u002F99.examples\u002F7.webhook-handler","Express-сервер, который принимает исходящие события Bitrix24, подгружает детали через REST, маршрутизирует по имени события. Всегда возвращает 200.",{"title":450,"path":451,"stem":452,"restApiVersion":15,"category":362,"description":453,"badge":15},"AI-ассистент","\u002Fdocs\u002Fexamples\u002Fai-assistant","docs\u002F99.examples\u002F8.ai-assistant","Загружает сделку и её дела, спрашивает у GPT-4o лучшее следующее действие, создаёт задачу, привязанную к сделке, с приоритетом и дедлайном.",{"title":455,"path":456,"stem":457,"restApiVersion":15,"category":362,"description":458,"badge":15},"Веб-поиск + LLM","\u002Fdocs\u002Fexamples\u002Fweb-search-llm","docs\u002F99.examples\u002F9.web-search-llm","Двухшаговый RAG: запрос к любому провайдеру веб-поиска, прогон результата через ваш LLM с цитатами [N], публикация ответа комментарием в таймлайн CRM на сделке.",{"id":460,"title":300,"audited":461,"badge":15,"body":462,"category":303,"description":304,"extension":1770,"links":1771,"meta":1775,"navigation":1776,"path":301,"restApiVersion":15,"seo":1777,"stem":302,"__hash__":1778},"docs\u002Fdocs\u002F2.working-with-the-rest-api\u002F80.tools-browser.md","2026-07-01",{"type":463,"value":464,"toc":1758},"minimark",[465,470,492,544,571,680,684,688,825,828,915,918,979,983,1043,1052,1126,1129,1169,1171,1174,1299,1302,1413,1416,1505,1511,1684,1688,1754],[466,467,469],"h2",{"id":468},"overview","Обзор",[471,472,473,483,484,487,488,491],"p",{},[474,475,479],"code",{"className":476,"language":477,"style":478},"language-ts-type shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ts-type","",[480,481,300],"span",{"class":482},"sBMFI"," — это синглтон (",[474,485,486],{},"new BrowserManager()","), экспортируемый из ",[474,489,490],{},"@bitrix24\u002Fb24jssdk",". Он объединяет дешёвые проверки user-agent \u002F платформы \u002F возможностей, на которые SDK опирается внутри, и предоставляет их коду приложения:",[493,494,495,507,521],"ul",{},[496,497,498,502,503,506],"li",{},[499,500,501],"strong",{},"Определение браузера"," — Opera, Internet Explorer (с 6 по 11, плюс числовой ",[474,504,505],{},"detectIEVersion","), Safari, Firefox, Chrome.",[496,508,509,512,513,516,517,520],{},[499,510,511],{},"Определение ОС \u002F платформы"," — macOS, Windows, Linux, Android (с ",[474,514,515],{},"detectAndroidVersion","), iPad, iPhone и объединённый ",[474,518,519],{},"isIOS",".",[496,522,523,526,527,530,531,530,534,530,537,540,541,520],{},[499,524,525],{},"Возможности"," — ",[474,528,529],{},"isMobile",", ",[474,532,533],{},"isRetina",[474,535,536],{},"isTouchDevice",[474,538,539],{},"isDoctype"," и ",[474,542,543],{},"isLocalStorageSupported",[471,545,546,547,550,551,554,555,530,558,530,561,530,564,567,568,570],{},"Все проверки выводятся из строки ",[474,548,549],{},"UA"," уровня модуля — приведённого к нижнему регистру ",[474,552,553],{},"navigator.userAgent",", захваченного один раз во время импорта — или из браузерных глобальных объектов (",[474,556,557],{},"window",[474,559,560],{},"document",[474,562,563],{},"navigator",[474,565,566],{},"localStorage","). Из-за этого ",[474,569,300],{}," имеет смысл только в браузерном контексте.",[572,573,577],"pre",{"className":574,"code":575,"language":576,"meta":478,"style":478},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Browser } from '@bitrix24\u002Fb24jssdk'\n\nif (Browser.isMobile()) {\n  \u002F\u002F ...\n}\n\nif (Browser.isLocalStorageSupported()) {\n  \u002F\u002F ...\n}\n","ts",[474,578,579,610,617,637,644,650,655,670,675],{"__ignoreMap":478},[480,580,583,587,591,595,598,601,604,607],{"class":581,"line":582},"line",1,[480,584,586],{"class":585},"s7zQu","import",[480,588,590],{"class":589},"sMK4o"," {",[480,592,594],{"class":593},"sTEyZ"," Browser",[480,596,597],{"class":589}," }",[480,599,600],{"class":585}," from",[480,602,603],{"class":589}," '",[480,605,490],{"class":606},"sfazB",[480,608,609],{"class":589},"'\n",[480,611,613],{"class":581,"line":612},2,[480,614,616],{"emptyLinePlaceholder":615},true,"\n",[480,618,620,623,626,628,631,634],{"class":581,"line":619},3,[480,621,622],{"class":585},"if",[480,624,625],{"class":593}," (Browser",[480,627,520],{"class":589},[480,629,529],{"class":630},"s2Zo4",[480,632,633],{"class":593},"()) ",[480,635,636],{"class":589},"{\n",[480,638,640],{"class":581,"line":639},4,[480,641,643],{"class":642},"sHwdD","  \u002F\u002F ...\n",[480,645,647],{"class":581,"line":646},5,[480,648,649],{"class":589},"}\n",[480,651,653],{"class":581,"line":652},6,[480,654,616],{"emptyLinePlaceholder":615},[480,656,658,660,662,664,666,668],{"class":581,"line":657},7,[480,659,622],{"class":585},[480,661,625],{"class":593},[480,663,520],{"class":589},[480,665,543],{"class":630},[480,667,633],{"class":593},[480,669,636],{"class":589},[480,671,673],{"class":581,"line":672},8,[480,674,643],{"class":642},[480,676,678],{"class":581,"line":677},9,[480,679,649],{"class":589},[466,681,683],{"id":682},"method-signature","Сигнатура методов",[685,686,501],"h3",{"id":687},"browser-detection",[572,689,691],{"className":476,"code":690,"language":477,"meta":478,"style":478},"isOpera(): boolean                           \u002F\u002F UA содержит 'opera'\nisIE(): boolean                              \u002F\u002F устаревший 'attachEvent' в document и не Opera\nisIE6(): boolean                             \u002F\u002F UA содержит 'msie 6'\nisIE7(): boolean                             \u002F\u002F UA содержит 'msie 7'\nisIE8(): boolean                             \u002F\u002F UA содержит 'msie 8'\nisIE9(): boolean                             \u002F\u002F document.documentMode >= 9\nisIE10(): boolean                            \u002F\u002F document.documentMode >= 10\nisIE11(): boolean                            \u002F\u002F detectIEVersion() >= 11\ndetectIEVersion(): number                    \u002F\u002F числовая версия IE, -1 если не IE\nisSafari(): boolean                          \u002F\u002F UA содержит 'safari' и не 'chrome'\nisFirefox(): boolean                         \u002F\u002F UA содержит 'firefox'\nisChrome(): boolean                          \u002F\u002F UA содержит 'chrome'\n",[474,692,693,707,718,729,739,749,759,770,780,790,802,814],{"__ignoreMap":478},[480,694,695,698,701,704],{"class":581,"line":582},[480,696,697],{"class":482},"isOpera",[480,699,700],{"class":589},"():",[480,702,703],{"class":482}," boolean",[480,705,706],{"class":642},"                           \u002F\u002F UA содержит 'opera'\n",[480,708,709,712,715],{"class":581,"line":612},[480,710,711],{"class":630},"isIE",[480,713,714],{"class":593},"(): boolean                              ",[480,716,717],{"class":642},"\u002F\u002F устаревший 'attachEvent' в document и не Opera\n",[480,719,720,723,726],{"class":581,"line":619},[480,721,722],{"class":630},"isIE6",[480,724,725],{"class":593},"(): boolean                             ",[480,727,728],{"class":642},"\u002F\u002F UA содержит 'msie 6'\n",[480,730,731,734,736],{"class":581,"line":639},[480,732,733],{"class":630},"isIE7",[480,735,725],{"class":593},[480,737,738],{"class":642},"\u002F\u002F UA содержит 'msie 7'\n",[480,740,741,744,746],{"class":581,"line":646},[480,742,743],{"class":630},"isIE8",[480,745,725],{"class":593},[480,747,748],{"class":642},"\u002F\u002F UA содержит 'msie 8'\n",[480,750,751,754,756],{"class":581,"line":652},[480,752,753],{"class":630},"isIE9",[480,755,725],{"class":593},[480,757,758],{"class":642},"\u002F\u002F document.documentMode >= 9\n",[480,760,761,764,767],{"class":581,"line":657},[480,762,763],{"class":630},"isIE10",[480,765,766],{"class":593},"(): boolean                            ",[480,768,769],{"class":642},"\u002F\u002F document.documentMode >= 10\n",[480,771,772,775,777],{"class":581,"line":672},[480,773,774],{"class":630},"isIE11",[480,776,766],{"class":593},[480,778,779],{"class":642},"\u002F\u002F detectIEVersion() >= 11\n",[480,781,782,784,787],{"class":581,"line":677},[480,783,505],{"class":630},[480,785,786],{"class":593},"(): number                    ",[480,788,789],{"class":642},"\u002F\u002F числовая версия IE, -1 если не IE\n",[480,791,793,796,799],{"class":581,"line":792},10,[480,794,795],{"class":630},"isSafari",[480,797,798],{"class":593},"(): boolean                          ",[480,800,801],{"class":642},"\u002F\u002F UA содержит 'safari' и не 'chrome'\n",[480,803,805,808,811],{"class":581,"line":804},11,[480,806,807],{"class":630},"isFirefox",[480,809,810],{"class":593},"(): boolean                         ",[480,812,813],{"class":642},"\u002F\u002F UA содержит 'firefox'\n",[480,815,817,820,822],{"class":581,"line":816},12,[480,818,819],{"class":630},"isChrome",[480,821,798],{"class":593},[480,823,824],{"class":642},"\u002F\u002F UA содержит 'chrome'\n",[685,826,511],{"id":827},"os-platform-detection",[572,829,831],{"className":476,"code":830,"language":477,"meta":478,"style":478},"isMac(): boolean                             \u002F\u002F UA содержит 'macintosh'\nisWin(): boolean                             \u002F\u002F UA содержит 'windows'\nisLinux(): boolean                           \u002F\u002F UA содержит 'linux' и не Android\nisAndroid(): boolean                         \u002F\u002F UA содержит 'android'\ndetectAndroidVersion(): number               \u002F\u002F разобранная версия Android, 0 если не определена\nisIPad(): boolean                            \u002F\u002F UA содержит 'ipad;' или Mac + touch\nisIPhone(): boolean                          \u002F\u002F UA содержит 'iphone;'\nisIOS(): boolean                             \u002F\u002F isIPad() || isIPhone()\n",[474,832,833,845,855,866,876,886,896,906],{"__ignoreMap":478},[480,834,835,838,840,842],{"class":581,"line":582},[480,836,837],{"class":482},"isMac",[480,839,700],{"class":589},[480,841,703],{"class":482},[480,843,844],{"class":642},"                             \u002F\u002F UA содержит 'macintosh'\n",[480,846,847,850,852],{"class":581,"line":612},[480,848,849],{"class":630},"isWin",[480,851,725],{"class":593},[480,853,854],{"class":642},"\u002F\u002F UA содержит 'windows'\n",[480,856,857,860,863],{"class":581,"line":619},[480,858,859],{"class":630},"isLinux",[480,861,862],{"class":593},"(): boolean                           ",[480,864,865],{"class":642},"\u002F\u002F UA содержит 'linux' и не Android\n",[480,867,868,871,873],{"class":581,"line":639},[480,869,870],{"class":630},"isAndroid",[480,872,810],{"class":593},[480,874,875],{"class":642},"\u002F\u002F UA содержит 'android'\n",[480,877,878,880,883],{"class":581,"line":646},[480,879,515],{"class":630},[480,881,882],{"class":593},"(): number               ",[480,884,885],{"class":642},"\u002F\u002F разобранная версия Android, 0 если не определена\n",[480,887,888,891,893],{"class":581,"line":652},[480,889,890],{"class":630},"isIPad",[480,892,766],{"class":593},[480,894,895],{"class":642},"\u002F\u002F UA содержит 'ipad;' или Mac + touch\n",[480,897,898,901,903],{"class":581,"line":657},[480,899,900],{"class":630},"isIPhone",[480,902,798],{"class":593},[480,904,905],{"class":642},"\u002F\u002F UA содержит 'iphone;'\n",[480,907,908,910,912],{"class":581,"line":672},[480,909,519],{"class":630},[480,911,725],{"class":593},[480,913,914],{"class":642},"\u002F\u002F isIPad() || isIPhone()\n",[685,916,525],{"id":917},"capabilities",[572,919,921],{"className":476,"code":920,"language":477,"meta":478,"style":478},"isMobile(): boolean                          \u002F\u002F UA iPhone \u002F iPad \u002F Android \u002F 'mobile' \u002F 'touch'\nisRetina(): boolean                          \u002F\u002F window.devicePixelRatio >= 2\nisTouchDevice(): boolean                     \u002F\u002F 'ontouchstart' in window или maxTouchPoints > 0\nisDoctype(target?: any): boolean             \u002F\u002F compatMode === 'CSS1Compat' (или запасной вариант)\nisLocalStorageSupported(): boolean           \u002F\u002F setItem\u002FremoveItem round-trip проходит успешно\n",[474,922,923,934,943,953,969],{"__ignoreMap":478},[480,924,925,927,929,931],{"class":581,"line":582},[480,926,529],{"class":482},[480,928,700],{"class":589},[480,930,703],{"class":482},[480,932,933],{"class":642},"                          \u002F\u002F UA iPhone \u002F iPad \u002F Android \u002F 'mobile' \u002F 'touch'\n",[480,935,936,938,940],{"class":581,"line":612},[480,937,533],{"class":630},[480,939,798],{"class":593},[480,941,942],{"class":642},"\u002F\u002F window.devicePixelRatio >= 2\n",[480,944,945,947,950],{"class":581,"line":619},[480,946,536],{"class":630},[480,948,949],{"class":593},"(): boolean                     ",[480,951,952],{"class":642},"\u002F\u002F 'ontouchstart' in window или maxTouchPoints > 0\n",[480,954,955,957,960,963,966],{"class":581,"line":639},[480,956,539],{"class":630},[480,958,959],{"class":593},"(target",[480,961,962],{"class":589},"?:",[480,964,965],{"class":593}," any): boolean             ",[480,967,968],{"class":642},"\u002F\u002F compatMode === 'CSS1Compat' (или запасной вариант)\n",[480,970,971,973,976],{"class":581,"line":646},[480,972,543],{"class":630},[480,974,975],{"class":593},"(): boolean           ",[480,977,978],{"class":642},"\u002F\u002F setItem\u002FremoveItem round-trip проходит успешно\n",[466,980,982],{"id":981},"key-concepts","Ключевые понятия",[984,985,986],"note",{},[471,987,988,990,991,993,994,996,997,1000,1001,1004,1005,1008,1009,1011,1012,1015,1016,1019,1020,530,1022,1024,1025,1027,1028,530,1030,530,1032,530,1034,530,1036,1004,1038,1004,1040,1042],{},[474,989,300],{}," читает ",[474,992,553],{}," в переменную ",[474,995,549],{}," уровня модуля ",[499,998,999],{},"один раз",", во время импорта. Чтение обёрнуто в ",[474,1002,1003],{},"try","\u002F",[474,1006,1007],{},"catch",", поэтому импорт модуля в небраузерном окружении (например, Node\u002FSSR) не выбрасывает исключение — ",[474,1010,549],{}," просто откатывается к ",[474,1013,1014],{},"'?'",", и каждая проверка на основе UA возвращает ",[474,1017,1018],{},"false",". Методы, напрямую обращающиеся к ",[474,1021,557],{},[474,1023,560],{}," или ",[474,1026,566],{}," (",[474,1029,533],{},[474,1031,536],{},[474,1033,539],{},[474,1035,543],{},[474,1037,711],{},[474,1039,753],{},[474,1041,763],{},"), всё же предполагают наличие этих глобальных объектов, поэтому их вызов вне браузера может выбросить исключение.",[1044,1045,1046],"caution",{},[471,1047,1048,1049,1051],{},"Это анализ user-agent (UA-sniffing), а не feature detection. Строки user agent можно подделать или обнулить, и браузеры всё чаще замораживают\u002Fурезают детали UA. Где возможно, предпочитайте feature detection (например, проверку именно того API, который вам нужен), и относитесь к ",[474,1050,300],{}," как к эвристике по принципу best-effort для косметических\u002FUX-ветвлений, а не как к границе безопасности или корректности.",[493,1053,1054,1074,1090,1113],{},[496,1055,1056,1062,1063,1065,1066,1069,1070,1073],{},[499,1057,1058,1061],{},[474,1059,1060],{},"isIPad()"," покрывает современный iPadOS."," Поскольку iPadOS сообщает о себе в строке UA как macOS, ",[474,1064,1060],{}," также возвращает ",[474,1067,1068],{},"true"," для UA в стиле Mac, который при этом сообщает о поддержке touch (",[474,1071,1072],{},"isTouchDevice()",") — именно так он отличает iPad от настоящего десктопного Mac.",[496,1075,1076,1086,1087,1089],{},[499,1077,1078,1081,1082,1085],{},[474,1079,1080],{},"detectIEVersion()"," возвращает ",[474,1083,1084],{},"-1"," для не-IE браузеров."," Он замыкается на ",[474,1088,1084],{}," для Opera, Safari, Firefox и Chrome до запуска специфичных для IE\u002FTrident эвристик, поэтому его безопасно вызывать безусловно.",[496,1091,1092,1098,1099,1101,1102,1106,1107,1110,1111,520],{},[499,1093,1094,1097],{},[474,1095,1096],{},"isDoctype(target?)"," принимает любой document-подобный объект."," Передайте ",[474,1100,560],{}," из iframe (или подобный), чтобы проверить режим рендеринга ",[1103,1104,1105],"em",{},"его",", а не верхнеуровневой страницы; при отсутствии ",[474,1108,1109],{},"target"," используется глобальный ",[474,1112,560],{},[496,1114,1115,1121,1122,1125],{},[499,1116,1117,1120],{},[474,1118,1119],{},"isLocalStorageSupported()"," — это реальная проба записи\u002Fудаления",", а не просто проверка ",[474,1123,1124],{},"typeof localStorage"," — она также ловит случаи, когда API существует, но выбрасывает исключение (режимы приватного просмотра, исчерпание квоты хранилища, отключение политикой).",[466,1127,375],{"id":1128},"error-handling",[471,1130,1131,1133,1134,1136,1137,1140,1141,1143,1144,1143,1146,1148,1149,530,1151,530,1153,530,1155,530,1157,530,1159,1161,1162,1165,1166,1168],{},[474,1132,300],{}," рассчитан на браузерные runtime. Чтение user-agent уровня модуля и ",[474,1135,1119],{}," обёрнуты в ",[474,1138,1139],{},"try\u002Fcatch",", но большинство проверок напрямую разыменовывают ",[474,1142,560],{}," \u002F ",[474,1145,557],{},[474,1147,563],{}," (например, ",[474,1150,711],{},[474,1152,753],{},[474,1154,533],{},[474,1156,536],{},[474,1158,505],{},[474,1160,515],{},") и выбрасывают ",[474,1163,1164],{},"ReferenceError",", когда этих глобальных объектов нет. Оборачивайте любой вызов проверкой окружения (или вовсе избегайте ",[474,1167,300],{},") в путях кода Node.js \u002F SSR, которые могут выполниться до гидрации.",[466,1170,352],{"id":362},[471,1172,1173],{},"Определение браузера:",[572,1175,1177],{"className":574,"code":1176,"language":576,"meta":478,"style":478},"import { Browser } from '@bitrix24\u002Fb24jssdk'\n\nif (Browser.isChrome()) {\n  \u002F\u002F Поведение для Chrome\n}\n\nif (Browser.isIE()) {\n  const version = Browser.detectIEVersion()\n  console.log(`Running on Internet Explorer ${version}`)\n}\n",[474,1178,1179,1197,1201,1215,1220,1224,1228,1242,1264,1295],{"__ignoreMap":478},[480,1180,1181,1183,1185,1187,1189,1191,1193,1195],{"class":581,"line":582},[480,1182,586],{"class":585},[480,1184,590],{"class":589},[480,1186,594],{"class":593},[480,1188,597],{"class":589},[480,1190,600],{"class":585},[480,1192,603],{"class":589},[480,1194,490],{"class":606},[480,1196,609],{"class":589},[480,1198,1199],{"class":581,"line":612},[480,1200,616],{"emptyLinePlaceholder":615},[480,1202,1203,1205,1207,1209,1211,1213],{"class":581,"line":619},[480,1204,622],{"class":585},[480,1206,625],{"class":593},[480,1208,520],{"class":589},[480,1210,819],{"class":630},[480,1212,633],{"class":593},[480,1214,636],{"class":589},[480,1216,1217],{"class":581,"line":639},[480,1218,1219],{"class":642},"  \u002F\u002F Поведение для Chrome\n",[480,1221,1222],{"class":581,"line":646},[480,1223,649],{"class":589},[480,1225,1226],{"class":581,"line":652},[480,1227,616],{"emptyLinePlaceholder":615},[480,1229,1230,1232,1234,1236,1238,1240],{"class":581,"line":657},[480,1231,622],{"class":585},[480,1233,625],{"class":593},[480,1235,520],{"class":589},[480,1237,711],{"class":630},[480,1239,633],{"class":593},[480,1241,636],{"class":589},[480,1243,1244,1248,1251,1254,1256,1258,1260],{"class":581,"line":672},[480,1245,1247],{"class":1246},"spNyl","  const",[480,1249,1250],{"class":593}," version",[480,1252,1253],{"class":589}," =",[480,1255,594],{"class":593},[480,1257,520],{"class":589},[480,1259,505],{"class":630},[480,1261,1263],{"class":1262},"swJcz","()\n",[480,1265,1266,1269,1271,1274,1277,1280,1283,1286,1289,1292],{"class":581,"line":677},[480,1267,1268],{"class":593},"  console",[480,1270,520],{"class":589},[480,1272,1273],{"class":630},"log",[480,1275,1276],{"class":1262},"(",[480,1278,1279],{"class":589},"`",[480,1281,1282],{"class":606},"Running on Internet Explorer ",[480,1284,1285],{"class":589},"${",[480,1287,1288],{"class":593},"version",[480,1290,1291],{"class":589},"}`",[480,1293,1294],{"class":1262},")\n",[480,1296,1297],{"class":581,"line":792},[480,1298,649],{"class":589},[471,1300,1301],{},"Ветвление по ОС \u002F платформе:",[572,1303,1305],{"className":574,"code":1304,"language":576,"meta":478,"style":478},"import { Browser } from '@bitrix24\u002Fb24jssdk'\n\nif (Browser.isIOS()) {\n  \u002F\u002F Общая ветка iPhone \u002F iPad\n}\n\nif (Browser.isAndroid()) {\n  const version = Browser.detectAndroidVersion()\n  console.log(`Android version: ${version}`)\n}\n",[474,1306,1307,1325,1329,1343,1348,1352,1356,1370,1386,1409],{"__ignoreMap":478},[480,1308,1309,1311,1313,1315,1317,1319,1321,1323],{"class":581,"line":582},[480,1310,586],{"class":585},[480,1312,590],{"class":589},[480,1314,594],{"class":593},[480,1316,597],{"class":589},[480,1318,600],{"class":585},[480,1320,603],{"class":589},[480,1322,490],{"class":606},[480,1324,609],{"class":589},[480,1326,1327],{"class":581,"line":612},[480,1328,616],{"emptyLinePlaceholder":615},[480,1330,1331,1333,1335,1337,1339,1341],{"class":581,"line":619},[480,1332,622],{"class":585},[480,1334,625],{"class":593},[480,1336,520],{"class":589},[480,1338,519],{"class":630},[480,1340,633],{"class":593},[480,1342,636],{"class":589},[480,1344,1345],{"class":581,"line":639},[480,1346,1347],{"class":642},"  \u002F\u002F Общая ветка iPhone \u002F iPad\n",[480,1349,1350],{"class":581,"line":646},[480,1351,649],{"class":589},[480,1353,1354],{"class":581,"line":652},[480,1355,616],{"emptyLinePlaceholder":615},[480,1357,1358,1360,1362,1364,1366,1368],{"class":581,"line":657},[480,1359,622],{"class":585},[480,1361,625],{"class":593},[480,1363,520],{"class":589},[480,1365,870],{"class":630},[480,1367,633],{"class":593},[480,1369,636],{"class":589},[480,1371,1372,1374,1376,1378,1380,1382,1384],{"class":581,"line":672},[480,1373,1247],{"class":1246},[480,1375,1250],{"class":593},[480,1377,1253],{"class":589},[480,1379,594],{"class":593},[480,1381,520],{"class":589},[480,1383,515],{"class":630},[480,1385,1263],{"class":1262},[480,1387,1388,1390,1392,1394,1396,1398,1401,1403,1405,1407],{"class":581,"line":677},[480,1389,1268],{"class":593},[480,1391,520],{"class":589},[480,1393,1273],{"class":630},[480,1395,1276],{"class":1262},[480,1397,1279],{"class":589},[480,1399,1400],{"class":606},"Android version: ",[480,1402,1285],{"class":589},[480,1404,1288],{"class":593},[480,1406,1291],{"class":589},[480,1408,1294],{"class":1262},[480,1410,1411],{"class":581,"line":792},[480,1412,649],{"class":589},[471,1414,1415],{},"Проверки возможностей:",[572,1417,1419],{"className":574,"code":1418,"language":576,"meta":478,"style":478},"import { Browser } from '@bitrix24\u002Fb24jssdk'\n\nif (Browser.isMobile() && Browser.isTouchDevice()) {\n  \u002F\u002F Подстройка вёрстки \u002F зон нажатия под touch\n}\n\nif (Browser.isRetina()) {\n  \u002F\u002F Отдавать ассеты высокого разрешения\n}\n",[474,1420,1421,1439,1443,1469,1474,1478,1482,1496,1501],{"__ignoreMap":478},[480,1422,1423,1425,1427,1429,1431,1433,1435,1437],{"class":581,"line":582},[480,1424,586],{"class":585},[480,1426,590],{"class":589},[480,1428,594],{"class":593},[480,1430,597],{"class":589},[480,1432,600],{"class":585},[480,1434,603],{"class":589},[480,1436,490],{"class":606},[480,1438,609],{"class":589},[480,1440,1441],{"class":581,"line":612},[480,1442,616],{"emptyLinePlaceholder":615},[480,1444,1445,1447,1449,1451,1453,1456,1459,1461,1463,1465,1467],{"class":581,"line":619},[480,1446,622],{"class":585},[480,1448,625],{"class":593},[480,1450,520],{"class":589},[480,1452,529],{"class":630},[480,1454,1455],{"class":593},"() ",[480,1457,1458],{"class":589},"&&",[480,1460,594],{"class":593},[480,1462,520],{"class":589},[480,1464,536],{"class":630},[480,1466,633],{"class":593},[480,1468,636],{"class":589},[480,1470,1471],{"class":581,"line":639},[480,1472,1473],{"class":642},"  \u002F\u002F Подстройка вёрстки \u002F зон нажатия под touch\n",[480,1475,1476],{"class":581,"line":646},[480,1477,649],{"class":589},[480,1479,1480],{"class":581,"line":652},[480,1481,616],{"emptyLinePlaceholder":615},[480,1483,1484,1486,1488,1490,1492,1494],{"class":581,"line":657},[480,1485,622],{"class":585},[480,1487,625],{"class":593},[480,1489,520],{"class":589},[480,1491,533],{"class":630},[480,1493,633],{"class":593},[480,1495,636],{"class":589},[480,1497,1498],{"class":581,"line":672},[480,1499,1500],{"class":642},"  \u002F\u002F Отдавать ассеты высокого разрешения\n",[480,1502,1503],{"class":581,"line":677},[480,1504,649],{"class":589},[471,1506,1507,1508,1510],{},"Защита доступа к ",[474,1509,566],{}," и проверка режима рендеринга документа:",[572,1512,1514],{"className":574,"code":1513,"language":576,"meta":478,"style":478},"import { Browser } from '@bitrix24\u002Fb24jssdk'\n\nfunction persist(key: string, value: string): void {\n  if (!Browser.isLocalStorageSupported()) {\n    return\n  }\n\n  localStorage.setItem(key, value)\n}\n\nif (!Browser.isDoctype(document)) {\n  console.warn('Page is rendered in quirks mode')\n}\n",[474,1515,1516,1534,1538,1577,1597,1602,1607,1611,1631,1635,1639,1658,1679],{"__ignoreMap":478},[480,1517,1518,1520,1522,1524,1526,1528,1530,1532],{"class":581,"line":582},[480,1519,586],{"class":585},[480,1521,590],{"class":589},[480,1523,594],{"class":593},[480,1525,597],{"class":589},[480,1527,600],{"class":585},[480,1529,603],{"class":589},[480,1531,490],{"class":606},[480,1533,609],{"class":589},[480,1535,1536],{"class":581,"line":612},[480,1537,616],{"emptyLinePlaceholder":615},[480,1539,1540,1543,1546,1548,1552,1555,1558,1561,1564,1566,1568,1571,1574],{"class":581,"line":619},[480,1541,1542],{"class":1246},"function",[480,1544,1545],{"class":630}," persist",[480,1547,1276],{"class":589},[480,1549,1551],{"class":1550},"sHdIc","key",[480,1553,1554],{"class":589},":",[480,1556,1557],{"class":482}," string",[480,1559,1560],{"class":589},",",[480,1562,1563],{"class":1550}," value",[480,1565,1554],{"class":589},[480,1567,1557],{"class":482},[480,1569,1570],{"class":589},"):",[480,1572,1573],{"class":482}," void",[480,1575,1576],{"class":589}," {\n",[480,1578,1579,1582,1584,1587,1589,1591,1593,1595],{"class":581,"line":639},[480,1580,1581],{"class":585},"  if",[480,1583,1027],{"class":1262},[480,1585,1586],{"class":589},"!",[480,1588,300],{"class":593},[480,1590,520],{"class":589},[480,1592,543],{"class":630},[480,1594,633],{"class":1262},[480,1596,636],{"class":589},[480,1598,1599],{"class":581,"line":646},[480,1600,1601],{"class":585},"    return\n",[480,1603,1604],{"class":581,"line":652},[480,1605,1606],{"class":589},"  }\n",[480,1608,1609],{"class":581,"line":657},[480,1610,616],{"emptyLinePlaceholder":615},[480,1612,1613,1616,1618,1621,1623,1625,1627,1629],{"class":581,"line":672},[480,1614,1615],{"class":593},"  localStorage",[480,1617,520],{"class":589},[480,1619,1620],{"class":630},"setItem",[480,1622,1276],{"class":1262},[480,1624,1551],{"class":593},[480,1626,1560],{"class":589},[480,1628,1563],{"class":593},[480,1630,1294],{"class":1262},[480,1632,1633],{"class":581,"line":677},[480,1634,649],{"class":589},[480,1636,1637],{"class":581,"line":792},[480,1638,616],{"emptyLinePlaceholder":615},[480,1640,1641,1643,1645,1647,1649,1651,1653,1656],{"class":581,"line":804},[480,1642,622],{"class":585},[480,1644,1027],{"class":593},[480,1646,1586],{"class":589},[480,1648,300],{"class":593},[480,1650,520],{"class":589},[480,1652,539],{"class":630},[480,1654,1655],{"class":593},"(document)) ",[480,1657,636],{"class":589},[480,1659,1660,1662,1664,1667,1669,1672,1675,1677],{"class":581,"line":816},[480,1661,1268],{"class":593},[480,1663,520],{"class":589},[480,1665,1666],{"class":630},"warn",[480,1668,1276],{"class":1262},[480,1670,1671],{"class":589},"'",[480,1673,1674],{"class":606},"Page is rendered in quirks mode",[480,1676,1671],{"class":589},[480,1678,1294],{"class":1262},[480,1680,1682],{"class":581,"line":1681},13,[480,1683,649],{"class":589},[466,1685,1687],{"id":1686},"alternatives-and-recommendations","Альтернативы и рекомендации",[493,1689,1690,1710,1722,1736],{},[496,1691,1692,1695,1696,1698,1699,1701,1702,1705,1706,1709],{},[499,1693,1694],{},"Где возможно, предпочитайте feature detection анализу UA."," Проверки ",[474,1697,300],{}," — это эвристики на основе ",[474,1700,553],{},", который можно подделать, заморозить или урезать в браузере. Например, предпочитайте прямую проверку ",[474,1703,1704],{},"'ontouchstart' in window"," (или ",[474,1707,1708],{},"Browser.isTouchDevice()",", который делает ровно это) выводу о поддержке touch из проверок платформы.",[496,1711,1712,1721],{},[499,1713,1714,1715,1143,1718,1720],{},"Используйте ",[474,1716,1717],{},"isMobile()",[474,1719,1072],{}," для решений по вёрстке, а не для блокировки функциональности."," Относитесь к ним как к UX-подсказкам (например, крупнее зоны нажатия, упрощённая навигация), а не как к способу полностью отключить функции — десктопный браузер на ноутбуке с поддержкой touch — это легитимная комбинация.",[496,1723,1724,1735],{},[499,1725,1726,1727,530,1730,530,1732,1734],{},"Методы, связанные с IE (",[474,1728,1729],{},"isIE*",[474,1731,505],{},[474,1733,774],{},"), нацелены на давно снятые с поддержки браузеры."," Держите их только для веток legacy-совместимости; новому коду под современные браузеры они, как правило, не нужны.",[496,1737,1738,1747,1748,1750,1751,1753],{},[499,1739,1740,1741,520],{},"Проверки типов для значений (а не окружения) живут в ",[1742,1743,1745],"a",{"href":1744},"\u002Fdocs\u002Fworking-with-the-rest-api\u002Ftools-type\u002F",[474,1746,311],{}," ",[474,1749,300],{}," отвечает на вопрос «в чём я выполняюсь», тогда как ",[474,1752,311],{}," — «какой формы это значение».",[1755,1756,1757],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":478,"searchDepth":612,"depth":612,"links":1759},[1760,1761,1766,1767,1768,1769],{"id":468,"depth":612,"text":469},{"id":682,"depth":612,"text":683,"children":1762},[1763,1764,1765],{"id":687,"depth":619,"text":501},{"id":827,"depth":619,"text":511},{"id":917,"depth":619,"text":525},{"id":981,"depth":612,"text":982},{"id":1128,"depth":612,"text":375},{"id":362,"depth":612,"text":352},{"id":1686,"depth":612,"text":1687},"md",[1772],{"label":300,"iconName":1773,"to":1774},"GitHubIcon","https:\u002F\u002Fgithub.com\u002Fbitrix24\u002Fb24jssdk\u002Fblob\u002Fmain\u002Fpackages\u002Fjssdk\u002Fsrc\u002Ftools\u002Fbrowser.ts",{},{"title":300},{"title":300,"description":304},"sWerKywiHWYkiNRYHn44ecXVnHXzk0edY_JL_nxHol0",{"data":1780,"body":1781},{},{"type":1782,"children":1783},"root",[1784],{"type":1785,"tag":471,"props":1786,"children":1787},"element",{},[1788],{"type":1789,"value":304},"text",1783080219520]