Veröffentlicht: Juni 26, 2026 · Aktualisiert: Juli 15, 2026
📦 Update v2.1 — 2026-07-15
Buttons blenden sich nach 2 Sekunden automatisch aus und erscheinen beim Hover wieder. Neu: Vollbild-Support — das Overlay bleibt auch während des YouTube-Vollbilds sichtbar.
Sieben Wochen nach dem ersten Release ist YT Redirector v2.0 fertig — ein kompletter Rewrite aller Kernkomponenten. Die wichtigsten Änderungen: dynamische Eintrags-Liste statt starrer 4-Slot-UI, Pro-Eintrag-Farben und Badge-Kürzel, Auto-Redirect-Modus, SPA-Navigation auf YouTube und zwei Bugfixes, die in v1 stille Fehler verursacht haben.
Die Projektseite enthält den vollständigen Changelog und die Installationsanleitung.
Was ist neu
Dynamische Eintrags-Liste mit Drag & Drop
V1 hatte vier feste Eingabefelder. V2 hat eine unbegrenzte Liste — jeder Eintrag lässt sich per ⠿-Handle per Drag & Drop umsortieren, einzeln per Toggle deaktivieren ohne ihn zu löschen, und mit einem ✕-Button entfernen. Über „+ Hinzufügen“ kommen neue Einträge dazu.
Pro-Eintrag: Farbe + Badge
Jeder Eintrag hat jetzt eine eigene Hintergrundfarbe (Color Picker) und ein optionales Badge-Kürzel (max. 2 Zeichen, z.B. „PI“ für Piped, „IV“ für Invidious). Das Badge erscheint im Overlay-Button statt des vollen Namens — kompakter, und der volle Name kommt als Tooltip. Das Badge des ersten aktiven Eintrags wird außerdem im Extension-Icon in der Chrome-Toolbar angezeigt.
Auto-Redirect
Wer immer dasselbe Frontend nutzt, kann jetzt „Automatisch zum ersten aktiven Eintrag weiterleiten“ aktivieren. Die Extension zeigt dann gar keine Buttons — sie leitet nach 500 ms automatisch weiter. Der kurze Delay erlaubt es, per Browsertaste zurückzugehen, falls man mal auf YouTube bleiben will.
SPA-Navigation
YouTube ist eine Single Page Application — beim Klick auf ein Video wird die URL geändert, ohne die Seite neu zu laden. V1 hat das Overlay in diesen Fällen nicht aktualisiert (falsche oder fehlende Buttons nach Navigation). V2 verwendet einen MutationObserver auf document.body, der Pfadänderungen erkennt und das Overlay neu rendert.
youtu.be-Support
V1 hatte *://*.youtube.com/* als einzige Host Permission. Kurzlinks wie youtu.be/abc123 wurden nicht erfasst. V2 ergänzt *://youtu.be/* in host_permissions und content_scripts.matches.
Bugfixes
declarativeNetRequest-Regeln entfernt
V1 enthielt statische rules.json-Regeln, die alle Navigation auf youtube.com-URLs auf piped.video umleiteten — inklusive Klicks auf YouTube-Links in Google-Suchergebnissen. Das war nicht beabsichtigt. V2 leert rules.json komplett; die Weiterleitung passiert ausschließlich durch den Content-Script-Button-Click oder den Auto-Redirect-Modus.
Async-Bug in background.js
chrome.storage.local.get() gibt in MV3 ein Promise zurück, keinen direkten Wert. In v1 stand:
// v1 — immer truthy, da Promise-Objekt != null
if (chrome.storage.local.get(['debug'])) {
console.error('Telemetry failed:', error);
}
Der Debug-Check war also immer aktiv — Telemetrie-Fehler wurden immer geloggt, unabhängig von der Debug-Einstellung. Fix in v2:
// v2 — korrekt async
const { debug } = await chrome.storage.local.get(['debug']);
if (debug) console.error('Telemetry failed:', error);
Update von v1
Wer v1 schon als unpacked Extension geladen hat: einfach die neuen Dateien in denselben Ordner kopieren und in chrome://extensions auf den Reload-Pfeil klicken. Beim Reload läuft automatisch eine Storage-Migration: bestehende Ziel-URLs werden übernommen, das alte language– und styleConfig-Format wird ins neue settings-Objekt überführt.
v2.1: Auto-Hide und Vollbild-Support
Ein kurzer Nachtrag zu einem Problem, das sich erst im Alltag gezeigt hat: Die Overlay-Buttons lagen dauerhaft über dem Video — besonders störend im Vollbild. v2.1 behebt das mit zwei Ergänzungen in content.js.
Auto-Hide nach 2 Sekunden
Nach dem Rendern startet ein 2-Sekunden-Timer. Läuft er ab, wird das Container-Div per CSS-Opacity auf 0 gesetzt — nicht entfernt, sondern unsichtbar gemacht. pointer-events: none verhindert dabei, dass das unsichtbare Element noch Klicks abfängt. Der Übergang dauert 0,4 Sekunden (CSS transition: opacity 0.4s ease).
Ein mouseenter-Handler auf dem Container bricht den Timer ab und setzt Opacity zurück auf 1. mouseleave startet den Timer neu. Das Ergebnis: Buttons erscheinen beim Laden kurz, blenden sich weg, und kommen beim Hover sofort wieder.
function scheduleHide() {
clearTimeout(hideTimer);
hideTimer = setTimeout(hideContainer, 2000);
}
container.addEventListener('mouseenter', () => { clearTimeout(hideTimer); showContainer(); });
container.addEventListener('mouseleave', () => { scheduleHide(); });
Vollbild-Support
Das war der eigentliche Knackpunkt: position: fixed Elemente sind im Browser-Vollbild (requestFullscreen()) schlicht unsichtbar. Das liegt daran, dass Chrome für das Vollbild einen separaten Rendering-Layer aufmacht, in dem nur Kindelemente des Vollbild-Elements gezeichnet werden. Ein fixed-Element in document.body ist kein Kind von document.fullscreenElement — es verschwindet.
Die Lösung: bei jedem fullscreenchange-Event wird der Container in das aktuelle document.fullscreenElement umgehängt (appendChild). Beim Verlassen des Vollbilds wandert er zurück nach document.body. Gleichzeitig wird der Auto-Hide-Timer kurz zurückgesetzt, damit die Buttons beim Vollbild-Eintritt sichtbar aufblinken.
function getHost() {
return document.fullscreenElement ?? document.webkitFullscreenElement ?? document.body;
}
function relocateContainer() {
const host = getHost();
if (container.parentNode !== host) host.appendChild(container);
clearTimeout(hideTimer);
showContainer();
scheduleHide();
}
document.addEventListener('fullscreenchange', relocateContainer);
document.addEventListener('webkitfullscreenchange', relocateContainer);
→ Projektseite mit Changelog und Download (v2.1)
🔗 Kurzlink: https://nga.li/ytr2
Kommentar schreiben