Встраивание Surface
Как вставить поверхность редактора в своё приложение: iframe и WebView, вставка и удаление, подписка на события, переподключение и рабочая установка.
Поверхность запускается локально и открывается по адресу из bootstrap. Эта страница — о том, как встроить её в своё приложение.
Как запустить поверхность
Заголовок раздела «Как запустить поверхность»# $CLI — путь к процессору, см. «Установка и проверка»"$CLI" surface --port 0 \ --doc /data/input.docx --save /data/output.docx
# первая строка stdout: fastdoc.surface-host-bootstrap.v1# адрес из bootstrap.url открыть в WKWebView, WebView2 или браузереВставить поверхность и убрать её
Заголовок раздела «Вставить поверхность и убрать её»const handle = window.fastdocSurface.mount(container, { theme: "light", locale: "ru", readOnly: false, cssVariables: { "--fastdoc-accent": "#2f5bff" }});
// при закрытии вкладки или документаhandle.unmount();Как получать события
Заголовок раздела «Как получать события»window.addEventListener("fastdoc-host-event", (event) => { const message = event.detail; if (message.schema !== "fastdoc.surface-host-event.v1") return;
switch (message.type) { case "ready": console.log(message.documentPath); break; case "dirty": setUnsavedBadge(message.dirty); break; case "saved": console.log(message.path, message.byteCount); break; case "error": showError(message.operation, message.message); break; case "unmounted": releasePartnerResources(); break; }});| Среда | Где встречается | Канал события |
|---|---|---|
| WKWebView, WebKitGTK | macOS, iOS, Linux | обработчик сообщений с именем fastdocHost |
| WebView2 | Windows | window.chrome.webview, событие WebMessageReceived |
| Обычный браузер, без обёртки | везде | событие DOM fastdoc-host-event |
Выбирать канал не нужно: каждое событие поверхность отправляет во все три сразу. Хост слушает тот, который есть у него, и не знает про остальные.
Встраивание
Заголовок раздела «Встраивание»<iframe src="http://127.0.0.1:9272/?token=a4-local-demo&locale=ru-RU&theme=light" title="A4 document editor" style="width:100%;height:720px;border:0"></iframe>Поверхность сообщает о своих состояниях — ready, dirty, saved, error и unmounted — событием окна fastdoc-host-event. Этого хватает, чтобы знать, что происходит с документом, но не чтобы им управлять: для полного доступа к модели и всему набору операций работайте параллельно через обмен строками JSON или WebSocket.
Что предусмотреть в рабочей установке
Заголовок раздела «Что предусмотреть в рабочей установке»Поверхность поднимается на случайном свободном порту, а не на заранее известном: занятый порт и чужие подключения к нему — лишний способ помешать работе.
Пропуск выдаётся на каждый сеанс заново и не должен попадать в журналы веб-сервера вместе с адресом страницы.
После разрыва соединение восстанавливается, но правка вслепую не повторяется: сначала нужно убедиться, что она не применилась до обрыва, иначе документ получит её дважды.
Сохранение сначала пишет новую копию, и только по явному решению пользователя ею заменяется исходный файл.
Точные имена
Заголовок раздела «Точные имена»Имена событий, схем, глобального объекта и параметров запуска собраны в справочнике Интерфейс поверхности в браузере. Берите их оттуда: на этой странице они приведены для примера и могут отстать.