Перейти к содержимому
FastOffice

Встраивание 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.

Поверхность поднимается на случайном свободном порту, а не на заранее известном: занятый порт и чужие подключения к нему — лишний способ помешать работе.

Пропуск выдаётся на каждый сеанс заново и не должен попадать в журналы веб-сервера вместе с адресом страницы.

После разрыва соединение восстанавливается, но правка вслепую не повторяется: сначала нужно убедиться, что она не применилась до обрыва, иначе документ получит её дважды.

Сохранение сначала пишет новую копию, и только по явному решению пользователя ею заменяется исходный файл.

Имена событий, схем, глобального объекта и параметров запуска собраны в справочнике Интерфейс поверхности в браузере. Берите их оттуда: на этой странице они приведены для примера и могут отстать.

Ассистент документации

Ответ собран из документации и может быть неточным — сверяйтесь с источниками.