From 163efd7a358cbef7999cf56aebb3e19868d83407 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 17 Jul 2026 08:59:59 +0000 Subject: [PATCH] fix: delete DocsAPI global + reload script on close for fresh ONLYOFFICE state --- .../433a0593-d3cf-414e-8763-ab5f87cbc75c.docx | Bin 40670 -> 40671 bytes renderer/carbone-templates/registry.json | 2 +- static/carbone.js | 33 ++++++++++++------ static/index.html | 4 +-- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx b/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx index 4f1f73a085e97f702afb39544274c8a4f87133ed..2ba4ff5d6bf216b8d0f3bd255a0a931b95d6ee0d 100644 GIT binary patch delta 2395 zcmZ8j2{e>@8=o0V_N`1Zj3xUrkt|v7C?$MZB0H(bE?LLYxQ3(|n!LkU27MVz;bsuY zHW~6+GKpKFK~2e0B3-U*cb0R{`RY0Ed4JFQdw=nUr2#K3q2A{N_SB$0c=`%COE%Jgu^9lgv z`a$$Z&!wm-BZ)nClhjGe-bPXNxJ*;NZywMKFi4_}-hsZ~uvfBkPKK%k+Ay}eiDdYl ziirlPetjdbphExF>T+U2%HOp9EfZ^DiM(q@(fplVn6yoj6V!p^h~7>)7LRu=l$49+ z-><%JA;o+LkIL8z5phrwrILxNyS;+>c4+h0`PT*X3pxvbq}yA%Ta@=B%IWvTBcJg_ zXYC+oUP(Po#k=?wwy4Z8Pk+?qJV!4p-yxOJ}l5TC!mdjoB zQr?r(QL4Spy7+)qq2CAZy_c98_HOVYKpPC6K$LZPt{f!~U}WhwW4#R!&v2KElIYWC zJ9(#uPw|d4w=ru9gX1I-LKkx$i_U6UXTmNG!g+=L=3wsW)dM`TsfQ*F+iM$E40KxV z6$xgGH4^xv{wPW*Iyxqy{%9=-vkMiA0>S4LaDHmkOGFghkEV=aMuKQiYPR?WL+_dD zjoRZSCWKhp@%zylA+zR=h5TtM=vx`3PB-#>eQ8)}F^WjZO@>^;RUg_%3dQ+z@@p^? zLRZcqyUQxxmawV66ceDYIaOc5^PA{-X0- z_YT9$VYIm35bG`8uvOu9vP4r-5vfBxzLWKRF66*Y?j?`n(Fe0A+3OpF!4B^tCBD*) z?}X&&5wlc=zvDAD--%{ymTNDc*9>b#g~b%CqIzxmQZ9CT5g#N^%$TmthdWlN{y4ah zBo%5gWU6*j9B@=2@8vE_q5~7|Mj4lhpyK(#fkXZguMO9nFn-0C1OHY%Y|l98Bwf|S zPnCA-o)>c+vzvQH%`?Olk%eSCTAlO?2>lq58Eu_@wf2V;hQHaaX^5d4iucdZ+cWY+ z_)5~`w1B1YC-0G~8C4;5QN^19b(nYw&;N}**I$q9@kT7a_?QYwM?=;E=&!tEEMd7V z^t?y&sBp+{AX^h0&bZ_C3M$0Gt6lpVijW}SwHG;|TN6rPnk zxyW;v?@K>4o7~ey(LtLQdZef*+WNn^oKq1FEB(4v;eLChV17beQ-^Af9H9Gmcii8I z+n_AS=O`~c>OA9x?ok(%-x%$z98WuBNnkM$Q8o2 zO}SV)++ZW7A+T`UaC>ECXZwWenbZ=inUSHENgXYHEKXJ+@kh>OMw#8AB;3(z z3Hd?f4@x-UjE&o5Dt+Qj&*!A3sL zvV$W?4b$q(6-LY5R@*nbw;n&6uqkfY{Zq|F^PGeYH0oUTYWEIYJ>mFJ?zCIOju+C( zrAV_7uk?ztbLuqBN$2U5a`A+_PPyYN>E zQ*$`&K4!7((+;EvGON2L`_!FN2DbST>!pj0fp8Vi2c!Hq5K8(d32s%0&DpO9PPYkYTKc#hUz_lZ`xPPW<+`*(&4ux2QDwW$r$#lxAENm;kJvvOayFUJAouyVk8 zk|eN)#qhD!t1PCGtp!H0O`Mo4Ts%aIJywI@+0j2xVsd)ouX?hYj z{8hhM#6b(R>~cID6_uQ!(FW^yS*fYUeJ?vK&c3W_wtgFAzLx^uEBhAC7#}q@d5H7F z#}?oPn)O^3LXmKy@ha&gyse_u=+#SbC zAA3trx6XRs9xd9Be{u`$g|I~N9kb8dKMA@vaAyoIGnH*?WUHx0-nsS{2%l~(DjNL# zSZQT!wawL>y{3SgZ5JaUGhwt{Yu}m9^-!sn2(z#?r0ksI!Vu#NZDrhJVOkTMk?(S# zrh)(bOJ5n~y}#DMkbb77Amu7`)FjBv=a9Vp;a8ZTHB|^j|d+X^fL+6 z-&U^u4Z{>TnzVH9#B@{uy{@gleTDH==z|Sw;NOc0s|dT_Q%N)2m)_O?v~_VKGw?L# z^59U;9& z5K1&4ZJeb%$BL5qDMAK-m#K5A-?UrydCYpJ&eFht(kK%E3xcBduc^{9K82iR ZopmOpK_J$}F>b0*prK5IpIF4E{sFk|1ls@r delta 2366 zcmZ9Oc|25Y8^@0=dv?Y)MjBG4O!g6??2_eqY;QscF_ZL2O)`^Ztgqx?%ot3zQj%Sk zWSQ{rAR#+NNQ)&~A>MI(oAH zd8w5D8W$T=K|EK}o|fx#ud_gg7Ox8yGE#2;+V>>kMc5BBnM;>qNnxMZ0iYWWmWD|X z#+{w7PiqS9oQTXCiFT^`=;i8>$q}T^|5lu3%-BXnoCEbvSWCDtIYkWnb$3EO*eUT! zi-k4=LIp44a*;o;eD~7 z{Y)rkH~r4}pMF*~CO~5<8M(vYuCykc8T>QM%(DoOUdgw)Qhc`|#uc5dmR(CpV#uy@ z-usVb-cq5R>L_xSw}>Wu5|VRT}KVG7*h9aGoFq1DI9=YJ)`z_eFdizmx^Qn>{>Q%*~ zn07m<`kJd>f;+6v(fYeH_&0U6>sg$-3}COUiH}dNoUSJsA9_3vkWfUmZ2em;Ff#09 zpymzOJn5#xwCcOYI}}xZz*wEYt^0`YL|rXO!e8c!n5Iyj&ccTZQm3b9?$8E~?c~uc zVurXKRfS``j0*LdQ)|hzf=O4 z^P|g@Qr+0gSeAFQn-?7~11Q6--|U9%?!9PDY@N|w`)yZ=IVT<|v^^h3X!fWsSFb*Q z%OCCSU-e!Er`Ndfz(GjW{zzd?kYVNu!R&gLN$;X|fu)*@#F?I!MK{UDlm+qSolpsi zCfCh-R?SwEhUqOmGY@ne78<-i^*S zP?21NF7fL6Y=yocUB6M`uA+RAQ?fzJDG_^X(!K8W`gZWUYfo2V9G>az1iIiGNB!<9 zy&0oTv9}3P3(#Yae@r`Z1`7V!-q(dbjBCCtFZXuM(+C-HS52>EO_M+~BIS;kd!aTZ z)+@*Aic6JHa*Z#!eEW0J2%XH&kL5YC8@+^x$DKwI3V$cJWGd8^EEX@{M zRr_I>BXz!FE333RYIx)7WPfqxpjPaF1A)dXVrE5ktdt(bDHA-RQCeyt4b8G=PF=Dq z9Hxmihm3|#D0pxAPf2-7_>F8jX0)eR6snZn&ag<>m0j1a>2Y3PEe`)a$g|lrj58#h z(}@CgkY+<;(xTXsW$Ta6pSd311S-Hcezo}of0*Z2tPv6kzLuIJlh{@%r$=zs+NspPtXu?M*9U*dB_$yfxvgr&Mi`%At%f+dn8!m=MKQPM*Nv?T z2`@@Tez^7%{cKfk@Y)^|;(!xtGGcwB{|GXv6_`u_kZAR{;jt_rM-wNOeUfxay0znB z*+6N?QvP3Vw1H8&kH=tee6dWvUs!myT-Xjgo9eHojbvH2Fc%LFAUggOEI1ZgUw=QL zZ<&_ogct0^FKoUnRdjT~nRe}j25!p|HoNg+b{pntUOeHeBX3sY>kqMAK5sK@nVq?k z7{yjDB(I;h7&bu1;lsAlU3JO7Z7{Bw%QqEa_%oqjJlwSNbG^EsW$yO%`w>4$XIz?a z%<34eThp7WKzLjGT6b!oBx~G_mqTDndAmSBh{!hCjC^MqrPQfW<0UaEi8PgC=()R$ zv%h%0sHD(S23F4Q0tcqMyeTPie_qX!N1!=Gf}Hz~Qz^@kLm`#O4$X1_MIX{RiUFj` z)H9I!QZbO`Q}rO7q3Zqro~oLGmiu>cC9?qlng;-cpbZ-USRgF|i5Uop2`*6ScV#+B zOiuU!g9Tq_$RqZ~L6u6|DKZ&*4giojz--1O(~d)7plH&pE^%OJ931>j=XC_n2d{gj1faM@PQw~a$gRt;ne{S?GrPS9&Dk#m05%;U_E7yvLYs4+)iHZia? L>)4?*%AWl{nZhBz diff --git a/renderer/carbone-templates/registry.json b/renderer/carbone-templates/registry.json index acfa156..7d48d87 100644 --- a/renderer/carbone-templates/registry.json +++ b/renderer/carbone-templates/registry.json @@ -6,6 +6,6 @@ "originalName": "master_cv_template.docx", "path": "/root/workspace/cv-app/renderer/carbone-templates/433a0593-d3cf-414e-8763-ab5f87cbc75c.docx", "uploadedAt": "2026-07-16T09:03:29.601Z", - "updatedAt": "2026-07-16T18:59:36.503Z" + "updatedAt": "2026-07-17T08:58:13.712Z" } ] \ No newline at end of file diff --git a/static/carbone.js b/static/carbone.js index ea9eb03..7a60077 100644 --- a/static/carbone.js +++ b/static/carbone.js @@ -267,13 +267,24 @@ function forceSaveOnlyoffice() { } } -// Close the editor — standard ONLYOFFICE teardown +// Close the editor — full teardown so the next open is completely fresh function closeOnlyofficeEditor() { if (onlyofficeEditorInstance) { try { onlyofficeEditorInstance.destroyEditor(); } catch (e) {} onlyofficeEditorInstance = null; } closeModal(); + + // Delete the DocsAPI global and remove the script tag so the next + // openOnlyofficeEditor call loads a completely fresh ONLYOFFICE API. + // This is the key: destroyEditor() cleans the editor instance, but + // the DocsAPI object itself retains internal state (websocket pools, + // document session references) that causes the next editor to load + // a stale document. Removing the script + global forces a fresh init. + delete window.DocsAPI; + const oldScript = document.querySelector('script[src*="api/documents/api.js"]'); + if (oldScript) oldScript.remove(); + loadOnlyofficeTemplates(); } @@ -305,16 +316,16 @@ async function openOnlyofficeEditor(templateId, templateName) { `; showModal(body, '', 'xlarge'); - // Load ONLYOFFICE API script (once) - if (typeof DocsAPI === 'undefined') { - await new Promise((resolve, reject) => { - const s = document.createElement('script'); - s.src = onlyofficeUrl + '/web-apps/apps/api/documents/api.js'; - s.onload = resolve; - s.onerror = () => reject(new Error('Failed to load ONLYOFFICE API')); - document.head.appendChild(s); - }); - } + // Load ONLYOFFICE API script fresh each time with cache-buster. + // This ensures a completely new DocsAPI instance with no stale state. + const scriptUrl = onlyofficeUrl + '/web-apps/apps/api/documents/api.js?cb=' + Date.now(); + await new Promise((resolve, reject) => { + const s = document.createElement('script'); + s.src = scriptUrl; + s.onload = resolve; + s.onerror = () => reject(new Error('Failed to load ONLYOFFICE API')); + document.head.appendChild(s); + }); if (typeof DocsAPI === 'undefined' || !DocsAPI.DocEditor) { throw new Error('ONLYOFFICE API not loaded'); diff --git a/static/index.html b/static/index.html index 4ee8571..f06ab67 100644 --- a/static/index.html +++ b/static/index.html @@ -139,7 +139,7 @@ - - + + \ No newline at end of file