Перейти к основному содержимому
Версия: 26.1.0 (в разработке)

Миграция редактора на API

Что изменилось

Раньше нужно было ручное управление iframe. Теперь редактор сам создаёт iframe и настраивается через builder-паттерн.

РаньшеСейчас
ИнтеграцияСложная, требует развёртывания сервера; Многоступенчатая установкаБыстрая, через npm и JavaScript API + Простая настройка
Кастомизация UIОграниченная настройка, нет поддержки пользовательских элементов UIГибкое управление интерфейсом, добавление вкладок, кастомные панели
Надстройки и расширенияНет встроенной поддержки надстроек; Ограниченная расширяемостьНадстройка на JS через onInit + Система расширений и событий
ДокументацияPDF-файлы, мало живых примеровСовременная, с примерами
ОбновленияТребует скачивания и ручного обновления всех компонентовnpm update одной командой
Гибкость архитектурыМонолит, малоподвиженМодульная, легко наращивать функциональность

Создаём контейнер для редактора

Раньше:

<iframe
ref={iframeRef}
name="editor"
className="editor"
src={amrUrl.href}
onLoad={onIframeLoad}
allow="clipboard-read; clipboard-write"
/>

Сейчас:

<div ref={containerRef} style={{ width: '100%', height: '100%' }} />

В коде:

// Создаем ссылку на контейнер
const containerRef = useRef(null);

// В JSX возвращаем контейнер
return (
<div className="editor-container">
<div ref={containerRef} style={{ width: '100%', height: '100%' }} />
</div>
);

// При инициализации передаем контейнер в метод mount()
const webEditorApi = await new EditorBuilder()
.mount(containerRef.current, 'http://localhost:9002');
примечание

Настройка разрешений происходит через EditorBuilder.

Настройка и запуск редактора

Раньше нужно было:

1. Создать объект редактора после загрузки iframe::

const amrEditorApi = new AmrEditApi(editorIframe, origin);

2. Открыть документ и передать все параметры сразу:

const docInfo = await amrEditorApi.openDocument({
content: arrayBuffer,
filename: 'Hello world',
lang: 'ru-RU',
mode: OPEN_MODE_FOR_EDIT.readonly,
userName: 'Test user',
userPermissions: { canCopy: false, canPrint: false },
});

Новый способ — два этапа

1. Конфигурация и монтирование:

const openDocumentApi = await new EditorBuilder()
.withLocale('ru-RU')
.withMode(OpenMode.readonly)
.withUserName('Test user')
.mount(container, 'http://localhost:9002');
warning

После mount() редактор готов, но документ ещё не открыт.

2. Открытие документа

await openDocumentApi.openDocument({
content: arrayBuffer,
filename: 'Hello world'
});

Работа с документом

После открытия появляется полный API. Тип документа доступен так:

const type = webEditorApi.editorApi.document.type;

Главное

  • Редактор теперь сам создаёт iframe.

  • Конфигурируйте через builder — это проще и безопаснее.

  • Монтируйте, потом открывайте документ.

  • Полный API для работы с документом доступен после открытия.

Интеграция стала удобнее и понятнее.