Files
htmlviewer-directediting/README.md
T
Hermes 818c793ce6 Core-clean variant: editor id eurooffice, no text-app patch
- 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
2026-09-11 12:28:13 +00:00

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.sh erneut

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, ID eurooffice
  • patches/htmlviewer/HtmlDirectEditorBridge.php — Template-Renderer
  • patches/htmlviewer/DirectController.php/apps/htmlviewer/direct/{fileId} Content-Endpoint (NoAdminRequired, Session)
  • patches/htmlviewer/RegisterDirectEditorListener.php — RegisterDirectEditorEvent-Listener
  • patches/htmlviewer/directEditing-template.php — Template: Fullscreen-iframe mit srcdoc + sandbox
  • patches/htmlviewer/patch_app.py — idempotente Registrierung in Application.php + routes.php
  • install.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.