---
title: "Read-only API — режим только для чтения"
description: "Переключение режима только для чтения на лету и что должен реализовать инструмент, чтобы оно работало на месте."
source: https://blokeditor.com/ru/docs/readonly-api/
lastmod: 2026-09-07
---

Фреймворк JavaScript

Расширение и система Только чтение

На этой странице readOnly.set(state, options?)

# Read-only API: включение и выключение правки

Управление режимом только для чтения. Переключение происходит на месте, пока каждый зарегистрированный блочный инструмент реализует `setReadOnly(state)` в своём прототипе — все встроенные инструменты это делают, — поэтому тот же экземпляр редактора меняет режим, сохраняя позицию курсора, историю отмен и прокрутку, а переключатель «редактирование/просмотр» — это `readOnly.set(!isEditing)` на ОДНОМ экземпляре вместо уничтожения одного редактора и создания другого. Проверка работает по принципу «всё или ничего»: достаточно установить один блочный инструмент без `setReadOnly`, и КАЖДОЕ переключение уходит на запасной путь save → clear → повторный рендер, который пересоздаёт все экземпляры блоков и не восстанавливает курсор (прокрутка при этом восстанавливается, а история отмен намеренно остаётся нетронутой).

[Редактировать на GitHub](https://github.com/JackUait/blok/blob/main/docs/src/components/api/api-data.ts)

### Как получить экземпляр редактора

Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.

TypeScript

```
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;

// Call any API method on it.
editor.caret.setToLastBlock('end');
```

## Методы

### readOnly.set(state, options?)

Promise<boolean>

Устанавливает режим только для чтения в указанное булево состояние. Переключение происходит на месте — без destroy/recreate: экземпляры блоков, позиция курсора, история отмен и прокрутка сохраняются — при условии что каждый зарегистрированный блочный инструмент реализует `setReadOnly(state)` в своём прототипе. Проверка работает по принципу «всё или ничего», и один инструмент без него (у всех встроенных он есть, у стороннего может не быть) отправляет КАЖДОЕ переключение на запасной путь — save → clear → повторный рендер, — который пересоздаёт все экземпляры блоков и не восстанавливает курсор, тогда как прокрутка и история отмен всё же сохраняются. Передайте `{ hideControls: true }`, чтобы дополнительно скрыть hover-панель инструментов, настройки блока и строчную панель, пока активен режим только для чтения — опция записывает объектную форму `config.readOnly`, так что живое состояние её отражает. Возвращает новое состояние.

Когда использовать

Предпочтительный способ войти в режим только для чтения и выйти из него — переключает на месте, сохраняя курсор, историю отмен и прокрутку, при условии что каждый зарегистрированный блочный инструмент реализует `setReadOnly()`. Возвращает промис с новым состоянием после применения.

Параметры

| Параметр | Тип | Обязательный | По умолчанию | Описание |
| --- | --- | --- | --- | --- |
| `state` | `boolean` | Обязательный | — | Устанавливаемое состояние режима только для чтения. |
| `options.hideControls` | `boolean` | — | `unchanged (inherits the current `config.readOnly`)` | Скрыть все элементы управления редактора (hover-панель инструментов, настройки блока, строчную панель), пока активен режим только для чтения. Значение «липкое»: `set()` пишет `config.readOnly`, только когда вы передаёте настоящее булево значение, поэтому если опцию опустить, сохранится текущее значение `hideControls` — из конфигурации конструктора или из более раннего вызова `set()`. Передайте `{ hideControls: false }` явно, чтобы вернуть элементы управления; `false` действует по умолчанию, только если `config.readOnly` никогда не задавался в объектной форме. |

TypeScript

```
// The edit/view toggle: ONE instance, flipped in place —
// caret, undo history and scroll survive the switch
await editor.readOnly.set(!isEditing);

// Enable read-only and hide all controls
// (hover toolbar, block settings, inline toolbar)
await editor.readOnly.set(true, { hideControls: true });

// Check state
console.log(editor.readOnly.isEnabled); // true or false
console.log(editor.readOnly.togglesInPlace); // true
```

### readOnly.toggle(state?)

Promise<boolean>

Устарело

Переключить состояние режима только для чтения. Без параметра переключает текущее состояние. С параметром устанавливает указанное состояние.

Используйте вместо: [readOnly.set](#readonly-api-readonly-set)

Когда использовать

Оставлен для совместимости; без параметра переключает текущее состояние.

TypeScript

```
// Toggle current state
const isReadOnly = await editor.readOnly.toggle();

// Enable read-only
await editor.readOnly.toggle(true);

// Disable read-only
await editor.readOnly.toggle(false);
```

## Свойства

| Свойство | Тип | Описание |
| --- | --- | --- |
| `isEnabled` | `boolean` | Текущее состояние режима только для чтения |
| `togglesInPlace` | `true` | Маркер уровня сборки, жёстко равный `true`: эта сборка Blok реализует путь переключения на месте вместо постоянного пересоздания редактора. Это не проба возможностей — он не сообщает, подходит ли под этот путь текущий набор установленных инструментов (для чего нужно, чтобы каждый блочный инструмент реализовал `setReadOnly`, и что нигде не публикуется). Используйте его только чтобы определить сборку Blok настолько старую, что переключения на месте в ней ещё нет. |

TypeScript

```
// The edit/view toggle: one instance, one call.
// Caret, undo history and scroll survive the switch —
// no destroy-and-recreate.
async function setEditing(isEditing: boolean) {
  await editor.readOnly.set(!isEditing);
}

// Framework adapters do this for you: change the readOnly
// prop (React/Vue) or input (Angular) and the adapter calls
// readOnly.set on the existing instance — same editor identity.
```
