Die HoneyBar braucht kein 'unsafe-inline' mehr

Ihre Stile hingen als <style> im Shadow DOM, und Markup faellt unter die
CSP der Gastgeber-App: Jede fremde App musste deshalb style-src
'unsafe-inline' erlauben, sonst stand die HoneyBar schwarz auf schwarz da.

Jetzt kommen sie als konstruiertes Stylesheet ueber die CSSOM herein, die
keine CSP kennt. Damit braucht die App gar keine style-src-Erlaubnis mehr
-- auch keine fuer die HoneyOS-Domain, was der geplante Weg ueber eine
zweite Datei und <link> gekostet haette, samt zweiter Anfrage.

Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und geht
denselben Weg. Der Rueckfall fuer alte Browser laeuft nach innerHTML,
sonst raeumt das Markup ihn gleich wieder weg.

Gemessen an einer nachgebauten App mit style-src 'self': Leiste bernstein,
32 px, Strich mit Verlauf, keine CSP-Meldung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-11 13:50:06 +02:00
1 parent 8ca16aec84
commit 3b47003492
4 files changed
+97 -33

No files matched your search

+17 -12
View File
@@ -288,21 +288,26 @@ Zwei Auswege:
→ Ersteres ist das Richtige, sobald die HoneyBar mehr kann als heute (Widgets,
Systemmenü). Vorher lohnt der Umbau nicht.
### Die HoneyBar ohne `unsafe-inline`
### Die HoneyBar ohne `unsafe-inline` — ✅ gebaut (11.09.2026)
Fremde Apps bekommen die HoneyBar über den Reverse Proxy (siehe README). Dabei
muss deren CSP heute `style-src 'unsafe-inline'` erlauben, weil die HoneyBar ihre
Stile im Shadow DOM mitbringt — ohne das erscheint sie schwarz auf schwarz.
Gemessen am 28.08.2026 an einer nachgebauten fremden App.
Fremde Apps mussten für die HoneyBar `style-src 'unsafe-inline'` erlauben, weil
sie ihre Stile im Shadow DOM als `<style>` mitbrachte — ohne das erschien sie
schwarz auf schwarz (gemessen am 28.08.2026).
**Auflösbar:** Die Stile als eigene Datei neben `honeybar.js` ausliefern und im
Shadow DOM per `<link>` einbinden. Dann genügt `style-src 'self' https://honeyos…`,
und die CSP der fremden App bleibt streng. Kostet eine zweite Anfrage, die
zwischengespeichert wird.
**Anders gelöst als hier geplant.** Der Plan war, die Stile als eigene Datei
auszuliefern und per `<link>` einzubinden. Das hätte `'unsafe-inline'` gegen
`style-src … https://honeyos…` getauscht — eine CSP-Änderung gegen eine andere,
plus eine zweite Anfrage. Stattdessen hängt die HoneyBar ihre Stile jetzt als
konstruiertes Stylesheet (`adoptedStyleSheets`) ein: Die CSP greift nur auf
Markup, nicht auf die CSSOM. Damit braucht die Gastgeber-App **gar keine
`style-src`-Erlaubnis** mehr, und es bleibt bei einer Datei ohne zweite Anfrage.
Zu prüfen ist dabei, was sonst noch inline gesetzt wird: die Lage der HoneyBar
selbst und der Innenabstand, den sie der Seite verpasst. Über die CSSOM gesetzte
Stile (`el.style.x = …`) fallen nicht unter die CSP — was im Markup steht, schon.
Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und wäre sonst
das einzige Stück ohne Farbe geblieben — er geht denselben Weg.
Zwei Fallen dabei: Der Rückfall für alte Browser hängt ein `<style>` in den
Root, also muss er **nach** `innerHTML` laufen, sonst räumt das Markup ihn
gleich wieder weg. Und `el.style.…` war nie das Problem — das ist schon CSSOM.
### Bild-Widget — ✅ gebaut (30.08.2026)