Nhúng trình soạn thảo
Nhúng trình soạn thảo
Mở trình soạn thảo O3O Office Online trong iframe trên trang web bất kỳ bằng api.js và O3O.Editor, không cần Nextcloud hay WOPI.
Trong trang này
Lớp nhúng cho phép bất kỳ trang web nào mở trình soạn thảo O3O Office Online trong một <iframe>, không cần Nextcloud hay một hệ lưu trữ nói WOPI. Trang của bạn chỉ cần hai thứ: một URL để máy chủ O3O tải tệp gốc, và (nếu muốn nhận bản đã sửa) một URL nhận callback.
Các thành phần#
| Thành phần | Vai trò | Chạy ở đâu |
|---|---|---|
api.js (/o3o/api.js) | Thư viện JavaScript thuần, không phụ thuộc, không cần bước dựng. Gắn window.O3O với O3O.Editor và O3O.version. | Trình duyệt |
| o3o-gate | Tạo phiên nhúng, tải tệp gốc, xét trần kết nối, đóng vai WOPI host nội bộ, giữ các phiên bản, gửi callback ký HMAC. | Máy chủ O3O, sau đường dẫn /o3o/ |
| Máy chủ soạn thảo (o3o-online) | Trình soạn thảo cộng tác hiển thị trong iframe. | Máy chủ O3O, sau /browser và /cool |
| Máy chủ của bạn | Cấp tệp gốc qua URL, ký cấu hình bằng JWT, nhận callback và cất bản đã sửa. | Hạ tầng của bạn |
Một lần mở tài liệu diễn ra thế nào#
- Trang của bạn nạp
http://localhost:8080/o3o/api.jsrồi gọinew O3O.Editor("id", config).api.jstự suy ra địa chỉ máy chủ từ thuộc tínhsrccủa chính thẻ script. api.jsgửi config (không kèmevents) tớiPOST /o3o/embed/session.- Gate kiểm origin và JWT, tải
document.urltheo quy tắc chống SSRF, xét trần kết nối, rồi trả địa chỉ trình soạn thảo kèmaccess_tokencủa phiên. api.jsdựng iframe và gửi form POST vào đó; token nằm trong thân form, không bao giờ lên URL.- Máy chủ soạn thảo đọc tệp từ gate qua mạng nội bộ. Khi lưu, gate ghi phiên bản mới, trả lời máy chủ soạn thảo ngay, rồi gửi callback về
callbackUrl. - Trang của bạn nhận sự kiện qua
postMessage:onReady,onDocumentLoaded,onModified,onSaved,onClose,onLimitReached,onError. - Mọi người rời tài liệu 30 giây: gate gửi callback
closed, giữ bản làm việc 24 giờ rồi xoá.
Ví dụ ngắn nhất#
<!-- Trang HTML tối thiểu, chạy được trên máy DEV (O3O_DEV_MODE=1) -->
<div id="o3o-editor" style="height: 720px"></div>
<script src="http://localhost:8080/o3o/api.js"></script>
<script>
const editor = new O3O.Editor("o3o-editor", {
document: {
url: "http://localhost:8080/o3o/demo/sample.docx",
title: "sample.docx",
fileType: "docx",
key: "sample-1"
},
editor: { mode: "edit", lang: "vi", user: { id: "u-1001", name: "Nguyễn Văn A" } },
events: {
onDocumentLoaded: () => console.log("đã nạp"),
onSaved: (e) => console.log("đã lưu phiên bản", e.version),
onError: (e) => console.error(e.code, e.message)
}
});
</script>Khi nào dùng lớp nhúng#
| Bạn cần | Dùng |
|---|---|
| Mở một tệp theo URL trong ứng dụng web của mình và nhận lại bản đã sửa | Lớp nhúng (nhóm trang này) |
| Người dùng đã làm việc trên Nextcloud | Nextcloud |
| Tự giữ quyền và lịch sử tệp ở hệ của mình, máy chủ soạn thảo gọi thẳng vào kho tệp | Tự viết WOPI host |
| Chuyển đổi hay dựng tài liệu không cần người mở | DocBuilder |
Có gì trong v1#
O3O.Editorvới 7 sự kiện và 5 phương thức.- Ký cấu hình bằng JWT HS256; callback ký HMAC SHA-256.
- Hai chế độ
editvàview; phiênviewkhông tính kết nối. - Chạm trần kết nối: phiên mới mở ở chế độ chỉ đọc kèm băng thông báo tiếng Việt, không bao giờ ngắt phiên đang sửa hay chặn lưu.
- Giữ 5 phiên bản gần nhất và bản gốc trong 24 giờ; URL tải có chữ ký.
- Quy tắc chống SSRF cho mọi URL mà máy chủ tự gọi; trang thử
/o3o/demotrên máy DEV.
Sắp có
Giao diện tối, thuỷ vân, ẩn hiện từng nút lệnh, lưu thành tệp khác, tạo tài liệu trống không cần url, lịch sử phiên bản trong giao diện, nhãn trắng (logo, tên, màu) cho bản doanh nghiệp.