O editor roda inteiramente no navegador com o motor WebAssembly do OnlyOffice, então os documentos são renderizados e editados no cliente — você não sobe nenhum servidor de documentos. O padrão recomendado mantém a fronteira limpa: o app pai cuida da autenticação, da busca e do salvamento; o iframe cuida só da edição. Tokens, cookies e APIs de negócio ficam no seu app.
Adicione com um iframe
<iframe
id="documentEditor"
src="https://edit.chaxus.com/editor?embed=1&embedOrigin=https://your-app.example.com"
style="width: 100%; height: 720px; border: 0"
></iframe>
Depois é só falar com ele por postMessage. Cada comando leva um id para você casar com a resposta, e cada evento do editor é uma mensagem document:*:
// abre um arquivo que seu app já buscou (a auth fica com você)
iframe.contentWindow.postMessage(
{ id, type: 'document:open-buffer', payload: { fileName: 'report.xlsx', buffer } },
'https://edit.chaxus.com',
);
// peça de volta o arquivo editado e envie você mesmo
iframe.contentWindow.postMessage({ id, type: 'document:save', payload: { targetExt: 'XLSX' } }, editorOrigin);
// → o editor responde com { type: 'document:saved', payload: { fileName, file } }
O que você ganha
- Um iframe e uma pequena API postMessage de comando/resposta — sem SDK para instalar
- Abrir a partir de uma URL, um File ou um ArrayBuffer que seu app buscou com as próprias credenciais
- Salvar de volta em XLSX, DOCX, PPTX ou CSV, devolvido como um
Filepara o seu app enviar - Modo somente leitura, trava de origem por mensagem (
embedOrigin) e uma consulta de estado - Nenhum servidor de documentos para operar — a edição é 100% WebAssembly no cliente
- Código aberto (AGPL-3.0) e auto-hospedável — incorpore sob o seu próprio domínio
Como funciona
- Adicione o iframe apontando para
/editor?embed=1, no tamanho do seu layout. - Espere o evento
document:readye então enviedocument:open-url,open-fileouopen-buffer. - A pessoa edita ali mesmo; o arquivo não sai do navegador a menos que seu app o envie para algum lugar.
- Envie
document:save; o editor devolve o arquivo editado emdocument:saved, e seu app o envia com a própria autenticação.
Somente leitura e modo prévia
Abra um documento somente leitura (um visualizador, uma etapa de revisão, um registro travado) passando readonly: true no comando de abertura, e alterne quando quiser com document:set-readonly — sem recarregar, e o documento continua onde a pessoa estava. No modo somente leitura a edição fica desativada e document:save responde com document:error; document:get-state informa o valor atual de readonly.
// abrir travado, destravar depois
send('document:open-url', { url, readonly: true });
send('document:set-readonly', { readonly: false });
Perguntas frequentes
Como incorporo o editor de documentos?
Adicione um iframe apontando para /editor?embed=1 e controle-o com a API postMessage para abrir e salvar documentos. Há uma demo funcionando em /embed-demo.html.
O editor vê os tokens de autenticação dos meus usuários?
Não. Autenticação, busca do arquivo e upload ficam no seu app — seu app busca o arquivo com as próprias credenciais e passa os bytes ao editor, então tokens e cookies nunca entram no iframe.
Quais formatos o editor incorporado aceita?
DOCX, XLSX, PPTX e CSV, editados no cliente com o motor WebAssembly do OnlyOffice. O comando de salvar exporta para XLSX, DOCX, PPTX ou CSV.
Dá para auto-hospedar ou usar em white-label?
Sim. É código aberto sob a AGPL-3.0 e é distribuído como arquivos estáticos, então você pode hospedar a sua cópia e incorporá-la sob o seu domínio.
Como restrinjo qual site pode falar com o editor?
Acrescente embedOrigin à URL do iframe para limitar as mensagens a uma origem, e verifique também event.origin no seu próprio manipulador de mensagens.
Dá para mostrar um documento somente leitura, ou travá-lo depois?
Sim. Passe readonly: true ao abrir, ou envie document:set-readonly quando quiser — ele alterna o editor ao vivo sem recarregar, e os salvamentos são recusados enquanto está travado.