English | 简体中文 | 日本語 | 한국어 | Deutsch | Español | Português | فارسی
پروندههای Word، Excel و PowerPoint را در همان زبانهٔ مرورگر باز کنید و ویرایش کنید. هیچ کارسازی در میان نیست: موتور OnlyOffice و مبدل WASM آن روی دستگاه خود کاربر اجرا میشوند، بنابراین سندها هرگز بارگذاری نمیشوند و به هیچ حسابی هم نیاز نیست.
نشانی سایت: edit.chaxus.com
- 🔒 هیچچیز بارگذاری نمیشود — هر تبدیل، ویرایش و برونبری درون همان زبانه انجام میشود
- 📝 ویرایش واقعی، نه پیشنمایش — DOCX، XLSX، PPTX و CSV، بههمراه ODF، RTF، TXT و قالبهای دودویی قدیمی؛ PDF باز میشود و میتوان روی آن یادداشت گذاشت
- 🕓 با بستن زبانه چیزی از دست نمیرود — ویرایشها خودکار در مرورگر خودتان ذخیره میشوند، ۷ روز میمانند و هر زمان قابل پاک شدناند (جزئیات)
- 📴 آفلاین هم کار میکند — بهصورت PWA نصبشدنی است؛ پس از نخستین بازدید به شبکه نیازی نیست
- 🌍 چندزبانه — ۸ زبان برای رابط سایت و ۴۵ زبان برای خود ویرایشگر
- 🧩 قابل جاسازی — رابط برنامهنویسی کامل postMessage برای یکپارچهسازی در iframe
- 🤖 آمادهٔ عاملها — ابزارهای WebMCP را در دسترس میگذارد تا عامل هوش مصنوعی درون مرورگر بتواند سند را باز کند، تبدیل کند و بخواند
- 🚀 همهجا قابل استقرار — یک ساخت ایستا؛ پوشهای از پروندهها پشت هر کارساز وب
همینطور استفاده کنید: edit.chaxus.com — چیزی برای نصب نیست.
میزبانی خودتان با Docker:
docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latestاجرا از روی کد:
git clone https://github.com/ranuts/document.git
cd document
pnpm install
pnpm run dev| گونه | ویرایش | باز کردن |
|---|---|---|
| سند | .docx |
.doc .odt .rtf .txt |
| صفحهگسترده | .xlsx .csv |
.xls .ods |
| ارائه | .pptx |
.ppt .odp |
| یادداشت، پر کردن، برونبری | .pdf |
همهٔ اینها را میتوان به PDF برونبری کرد. CSV هنگام خروج رمزگذاری خود را نگه میدارد (هنگام باز کردن، UTF-8، GB18030 و Latin-1 تشخیص داده میشوند).
| مسیر | چیست |
|---|---|
/ |
صفحهٔ آغازین. تا چیزی باز نکنید، ویرایشگر بارگذاری نمیشود. |
/editor |
خود ویرایشگر. |
/history |
سندهایی که این مرورگر نگه داشته است (پایینتر). |
/help, /changelog |
از روی مارکداونهای content/ ساخته میشوند. |
پارامترهای /editor:
| پارامتر | توضیح |
|---|---|
src=<url> |
باز کردن سند از یک نشانی (آن نشانی باید CORS را اجازه دهد) |
file=<url> |
همان، با املای قدیمی؛ اگر هر دو باشند این یکی برنده است |
new=docx |
ساختن سند خالی (docx، xlsx، pptx) |
doc=<id> |
باز کردن دوبارهٔ سندی از تاریخچهٔ این مرورگر — ویرایشگر شناسهٔ خودش را اینجا میگذارد، پس بارگذاری دوباره به همان سند برمیگردد |
readonly=1 |
باز کردن فقط برای دیدن: ویرایش و برونبری غیرفعال میشوند |
embed=1 |
حالت جاسازی؛ صفحهٔ میزبان ویرایشگر را با postMessage هدایت میکند |
locale=fa |
زبان رابط |
سندها به هیچجا فرستاده نمیشوند. تنها دو چیز بهطور محلی نگه داشته میشود و هر دو را خودتان میتوانید پاک کنید:
- نسخههایی از آنچه ویرایش کردهاید. هنگام کار، ویرایشگر سند را در همین مرورگر (IndexedDB) ذخیره میکند تا بارگذاری دوباره، بستن زبانه یا از کار افتادن مرورگر کارتان را از بین نبرد. بار بعد که ویرایشگر را باز کنید، همان را به شما پیشنهاد میدهد. این نسخهها برای آناند که کار نیمهتمام را پی بگیرید — پشتیبان نیستند، پس هر چه را میخواهید نگه دارید برونبری کنید.
- هفت روز، و بعد رفته. هر سند هفت روز پس از آخرین ویرایش یا باز کردنش خودبهخود پاک میشود، چه برگردید و چه برنگردید.
/history آنچه را ذخیره شده فهرست میکند؛ در هر سطر
دکمهٔ پاک کردن هست، یک «پاک کردن همه» و کلیدی برای خاموش کردن کامل ذخیرهٔ خودکار. پاک کردن
از آنجا بیدرنگ اثر میکند. روی رایانهٔ مشترک، همین صفحه جایی است که باید سر بزنید.
ویرایشگر را جاسازی کنید و با postMessage هدایتش کنید. تقسیم کار معمول این است: سامانهٔ شما احراز هویت و ذخیرهسازی را بر عهده میگیرد و iframe ویرایش را.
<iframe
id="documentEditor"
src="https://your-deployment/editor?embed=1"
style="width: 100%; height: 720px; border: 0"
></iframe>// باز کردن یک سند
iframe.contentWindow.postMessage(
{ id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } },
'https://your-deployment',
);
// شنیدن نتیجه
window.addEventListener('message', (e) => {
if (e.data?.type === 'document:opened') console.log('آمادهٔ ویرایش');
if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file);
});ویرایشگر جاسازیشده تاریخچهٔ محلی نگه نمیدارد — سند از آنِ صفحهٔ میزبان است.
→ مرجع کامل API — همهٔ گونههای پیام، فهرست مبدأهای مجاز، حالت فقطخواندنی و روند ذخیره.
بهصورت مؤلفه هم در دسترس است: همین پروژه پیشنمایش سند را در @ranui/preview (مستندات) به کار میاندازد.
جایی که مرورگر پشتیبانی کند، صفحه ابزارهایی را ثبت میکند که عامل بهجای کار کردن با رابط
کاربری مستقیماً آنها را فرا میخواند: open_document_url، open_document_buffer،
create_document، save_document، get_document_text، set_readonly،
get_document_state. در این حالت هم سندها دستگاه را ترک نمیکنند — خود مرورگر آنها را
میگیرد و تبدیل میکند. جایی که این API نباشد، هیچ اتفاقی نمیافتد.
یک ساخت ایستا — بدون زمان اجرا، بدون پایگاه داده.
pnpm build # خروجی در dist/dist/ را بارگذاری کنید. public/_headers قرارداد حافظهٔ نهانی را دارد که سایت بر آن
حساب میکند (داراییهای هشدار تغییرناپذیر، سرویسورکر هرگز در حافظهٔ نهان). میزبانهایی که
آن را نادیده بگیرند باز هم کار میکنند، فقط بیشتر بازبینی میکنند.
در Nginx، index.html را بهعنوان پاسخ پیشفرض مسیرهای ناشناخته سرو کنید:
location / {
root /var/www/document;
try_files $uri $uri/ /index.html;
}.github/workflows/pages-build-site.yml با هر push به main میسازد و منتشر میکند. در
تنظیمات مخزن، Pages را با منبع GitHub Actions روشن کنید.
# ساده
docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest
# با HTTPS و احراز هویت پایه
docker run -d --name document -p 443:443 \
-v /path/to/certs:/ssl \
-e SERVER_BASIC_AUTH='user:$2y$...' \
-e SERVER_HTTP2_TLS=true \
-e SERVER_HTTP2_TLS_CERT=/ssl/cert.pem \
-e SERVER_HTTP2_TLS_KEY=/ssl/key.pem \
ghcr.io/ranuts/document:latestSERVER_BASIC_AUTH یک هش BCrypt میگیرد؛ برای گریز در پوسته، نویسههای $ را دوبرابر
کنید. تنظیم حافظهٔ نهان تصویر در sws.toml است.
ساخت همراه OnlyOffice کتابخانهٔ قلمهایش را در public/fonts/ میآورد که با
public/sdkjs/common/AllFonts.js نمایه شده است. قلمها در زمان نیاز گرفته میشوند — هر سند
تنها همانهایی را میگیرد که واقعاً به کار میبرد.
→ راهنمای مدیریت قلمها — قالب کاتالوگ نمایهشده، ثبتها، و افزودن قلم
با bin/font-catalog.mjs.
pnpm install --frozen-lockfile
pnpm run dev # کارساز توسعه
pnpm run build # ساخت تولیدی (bin/build.sh)
pnpm run lint # oxlint + tsc + بررسی پیکربندی docker
pnpm run test # آزمونهای واحد (Vitest)
pnpm run test:e2e # آزمونهای سرتاسری (Playwright، ویرایشگر واقعی + WASM واقعی)مجموعهٔ سرتاسری بهجای بدلها، ویرایشگر و مبدل واقعی را به کار میاندازد؛ شامل رفتوبرگشت
سند، پروتکل جاسازی و روند بازیابی. در docs/explorations/ نوشته شده که هر بخش غیربدیهی چرا
اینگونه است — پیش از دست بردن در یکپارچگی ویرایشگر، خواندنش میارزد.
- sdkjs و web-apps — ویرایشگرهای OnlyOffice
- onlyoffice-x2t-wasm — مبدل سند بر پایهٔ WASM
- ranui / ranuts — سامانهٔ طراحی و ابزارهایی که این سایت با آنها ساخته شده
- se-office، onlyoffice-web-local — کارهای پیشین در اجرای OnlyOffice بدون کارساز سند
از Issue و Pull Request استقبال میشود. شاخهٔ main محافظتشده است: روی یک شاخه کار کنید و
PR باز کنید تا lint، آزمونهای واحد و سه مجموعهٔ سرتاسری (کارساز توسعه، رفتار Cloudflare
Pages و تصویر تولیدی Docker) اجرا شوند.
این پروژه اثری مشتقشده از ONLYOFFICE (سامانههای sdkjs و web-apps، (c) Ascensio System SIA) است. نسخهٔ اصلی زیر پروانهٔ AGPL همراه با شرطهای افزودهٔ بخش ۷ آن منتشر میشود: نشان اصلی محصول باید حفظ شود و هیچ حقی در قانون علائم تجاری واگذار نمیشود. به همین دلیل نشان ONLYOFFICE در سربرگ ویرایشگر و پنل «درباره» دستنخورده باقی مانده است. متن کامل، نسخهٔ vendor و همهٔ تغییرهایی که روی آن دادهایم در NOTICE آمده است.
ONLYOFFICE علامت تجاری Ascensio System SIA است. این پروژه محصول رسمی ONLYOFFICE نیست و هیچ وابستگی یا تأییدی از سوی Ascensio System SIA ندارد.