- HtmlDirectEditor getId() now returns 'eurooffice' (hard-coded in the iOS/Android editor registry) -> 'Öffnen mit Office' long-press renders HTML - install.sh restores the original TextDirectEditor if a previous install patched it; no core app patch anymore - README rewritten: behavior, variant rationale, files
2.9 KiB
htmlviewer-directediting
Rendert HTML-Dateien in der Nextcloud iOS/Android App in einem sandboxed WebView statt als Quelltext (QuickLook).
Warum das existiert
Die Mobile-Apps wählen den Editor für eine Datei über die Server-Capabilities
(/ocs/v2.php/apps/files/api/v1/directEditing) und haben eine hartcodierte
Editor-Registry (NCDirectEditorAdapter in nextcloud/ios): nur text,
eurooffice, onlyoffice, richdocuments, whiteboard sind bekannt. Ein neuer
Server-Editor mit eigener ID (z.B. htmlviewer) wird von der App nicht aufgelöst
→ Fallback auf QuickLook → HTML-Quelltext.
Lösung (nur htmlviewer-App, core-clean)
Die htmlviewer-App registriert einen IEditor mit der hartcodeten App-Editor-ID
eurooffice und Mimetype text/html + Bridge, Template mit sandboxed
iframe (srcdoc — Inhalt direkt eingebettet, kein Cookie-Problem in mobilen
WebViews) und Content-Controller.
Die Nextcloud-Text-App und der Core werden nicht verändert.
Verhalten
- Single-Tap auf HTML: Quelltext-Ansicht (iOS-Standard, Text-App gewinnt die Editor-Wahl — das ist ohne Text-App-Patch nicht änderbar, siehe unten)
- Long-Press → "Öffnen mit Office": rendert das HTML in der WebView
Installation
./install.sh nextcloud1-app-1
Idempotent, kann nach jedem htmlviewer-/Nextcloud-Update neu laufen. Stellt ein altes Text-App-Patch-Backup automatisch wieder her, falls vorhanden.
Nach App-Updates neu nötig
- htmlviewer-App-Update überschreibt
lib/DirectEditing/,templates/,Application.php-Registrierung →install.sherneut
Varianten
Auto-Open bei Single-Tap wäre nur möglich, wenn die Text-App gepatcht wird
(open()-Bridge auf die htmlviewer-Template + text/html in deren Mimetypen),
weil die iOS-App im automatischen Loop immer zuerst Editor text wählt und die
App-Registry nur die 5 hartcodeten IDs kennt. Das machen wir bewusst NICHT —
Core-App-Patches sind update-anfällig und unübersichtlich. Die Long-Press-
Variante funktioniert ausschließlich mit der installierten htmlviewer-App.
Dateien
patches/htmlviewer/HtmlDirectEditor.php— IEditor-Implementierung, IDeuroofficepatches/htmlviewer/HtmlDirectEditorBridge.php— Template-Rendererpatches/htmlviewer/DirectController.php—/apps/htmlviewer/direct/{fileId}Content-Endpoint (NoAdminRequired, Session)patches/htmlviewer/RegisterDirectEditorListener.php— RegisterDirectEditorEvent-Listenerpatches/htmlviewer/directEditing-template.php— Template: Fullscreen-iframe mit srcdoc + sandboxpatches/htmlviewer/patch_app.py— idempotente Registrierung in Application.php + routes.phpinstall.sh— Installer (core-clean: restores any old text-app backup)
Status (2026-09-11)
Auf nextcloud1 (Nextcloud 34.0.2, htmlviewer 33.0.0) getestet: Long-Press → "Öffnen mit Office" rendert HTML in der iOS-App in sandboxed WebView.