/** * Wo die Oberfläche liegt – eine einzige Quelle für Fenster und Sperre. * * `fenster.ts` lädt diese Datei, `sicherheit.ts` lässt genau sie als * Navigationsziel zu. Stünde der Pfad an beiden Stellen, könnten sie * auseinanderlaufen – und zwar in die gefährliche Richtung: Die Sperre * verböte dann entweder die eigene Seite oder ließe eine fremde durch. */ import { join } from 'node:path'; import { pathToFileURL } from 'node:url'; /** * Pfad der gebauten `index.html`. * * Relativ zum Ausgabeverzeichnis des Main-Prozesses (`out/main`), in das * electron-vite dieses Modul bündelt. */ export function oberflaechenDatei(): string { return join(__dirname, '../renderer/index.html'); } /** Dieselbe Datei als `file:`-URL, wie Electron sie beim Laden erzeugt. */ export function oberflaechenUrl(): string { return pathToFileURL(oberflaechenDatei()).href; } /** * Meinen zwei `file:`-URLs dieselbe Datei? * * Hash und Query bleiben außer Betracht – Sprungziele innerhalb der eigenen * Seite sind unbedenklich. Groß- und Kleinschreibung ebenfalls: Unter Windows * ist derselbe Pfad unabhängig davon dieselbe Datei, und der * Laufwerksbuchstabe kommt nicht immer gleich geschrieben an. * * Als reine Funktion herausgezogen, damit sie ohne Electron prüfbar ist. */ export function istGleicheDatei(ziel: string, eigene: string): boolean { try { const a = new URL(ziel); const b = new URL(eigene); if (a.protocol !== 'file:' || b.protocol !== 'file:') { return false; } return ( decodeURIComponent(a.pathname).toLowerCase() === decodeURIComponent(b.pathname).toLowerCase() ); } catch { return false; } }