• v1.5.1 d302591c25

    v1.5.1: el shell dejaba de meterse dentro del editor de OnlyOffice en Windows

    munka publicó esto 2026-07-29 07:12:22 -05:00 | 43 commits a main desde esta versión

    OnlyOffice fallaba al editar y al descargar SOLO en la app de escritorio de
    Windows. En el navegador y en la app de macOS iba bien. La causa estaba en el
    propio shell, no en el servidor de documentos.

    En Windows, wry inyecta los scripts de inicio en TODOS los marcos e ignora
    for_main_frame_only (wry-0.55.1/src/webview2/mod.rs:492-495, documentado en su
    lib.rs:990); macOS si respeta la bandera (wkwebview/mod.rs:643-645). Y TAURI
    viaja con ellos, asi que la guarda «if (!T || !T.event) return» no frenaba nada.
    Resultado: INIT_JS_TPL corria DENTRO del iframe del Document Server con ORIGIN
    apuntando todavia a la app; como alli location.href es el de docs.*, cada enlace
    del editor se resolvia contra ese origen, daba isExt() = true y se desviaba al
    navegador del sistema —que no tiene la sesion: «no se puede acceder»—, y
    window.open devolvia null.

    Cambios:

    1. Guarda de marco y origen al principio del script inyectado: solo actua en el
      documento PRINCIPAL y solo en el origen de la app. En macOS es un no-op (alli
      nunca corrio en subframes). De paso arregla que en Windows el shell tambien
      secuestrara los enlaces de las paginas de SSO.

    2. El manejador de atajos ignora e.altKey. AltGr enciende ctrlKey en Windows, asi
      que escribir [ o ] con teclado espanol disparaba history.back()/forward() en
      vez de escribir el caracter — en el editor y en cualquier campo de la app.

    3. Aviso nativo al terminar una descarga. No es un adorno: wry trae un manejador
      de descargas por defecto (wry-0.55.1/src/lib.rs:830), de modo que en WebView2
      siempre se registra DownloadStarting y siempre responde SetHandled(true)
      (webview2/mod.rs:858-861), lo que apaga la interfaz de descargas de Windows.
      El archivo bajaba a Descargas pero nada lo decia y parecia roto. Quitar el
      manejador NO devuelve la interfaz nativa: el de wry sigue puesto.

    4. Feature «devtools» de tauri: el inspector queda disponible tambien en release.
      Sin el, un fallo que solo aparece en la app instalada no se puede mirar por
      dentro.

    Descartado a proposito: registrar on_new_window. En macOS el delegado ejecuta
    webview.window().unwrap() y current_window.screen().unwrap() ANTES del match
    (wry-0.55.1/src/wkwebview/class/wry_web_view_ui_delegate.rs:150-154), tambien en
    la rama Deny; y este shell oculta la ventana al cerrar, con lo que NSWindow.screen
    puede ser nil y la app entera abortaria. Cambiar un fallo de Windows por un crash
    en macOS no compensa.

    Verificado: cargo check limpio; sintaxis del script inyectado validada con node;
    y simulacion de la guarda — marco principal + origen propio interviene, iframe de
    OnlyOffice no interviene, origen ajeno no interviene.

    Co-Authored-By: Claude Opus 5 noreply@anthropic.com

    Descargas