fix: Lautstärke wird nun direkt auf das nächste Reel angewandt

Instagram lädt das nächste Reel vor; dessen <video> wird früh von
scan() erkannt und mit Steuerleiste versehen, wobei _rcDesiredVolume
mit dem damaligen lastVolume eingefroren wurde. Nutzeränderungen
danach aktualisierten nur die globale Variable, nicht das vorgeladene
Reel — enforceVolume erzwang den veralteten Wert, bis zufällig ein
später angeheftetes Video drankam.

enforceVolume und der Tastatur-Handler übernehmen den Wunschstand nun
vor jeder Aktion aus der globalen Quelle (lastVolume/lastMuted) statt
dem eingefrorenen pro-Video-Wert zu vertrauen.
This commit is contained in:
Tronax 2026-08-08 11:07:51 +02:00
parent 8fc36b94aa
commit 3ef8c142b9
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o

View file

@ -228,6 +228,16 @@
function enforceVolume() { function enforceVolume() {
if (rcGuarding) return; if (rcGuarding) return;
// WICHTIG: Wunschstand immer aus der globalen Quelle übernehmen.
// Instagram lädt das nächste Reel vor — sein <video> existiert
// schon, bevor es sichtbar wird, und wird dann früh von scan()
// angeheftet. Dabei wird _rcDesiredVolume mit dem DAMALIGEN
// lastVolume eingefroren. Ändert der Nutzer danach auf dem
// aktuellen Reel die Lautstärke, bliebe das vorgeladene Reel
// sonst auf dem veralteten Wert stehen. Wir synchronisieren
// deshalb hier (und vor jeder Tastatur-Aktion) neu.
video._rcDesiredVolume = lastVolume;
video._rcUserMuted = lastMuted;
rcGuarding = true; rcGuarding = true;
// Lautstärke immer auf den Wunschwert zwingen ... // Lautstärke immer auf den Wunschwert zwingen ...
if (Math.abs(video.volume - video._rcDesiredVolume) > 0.001) { if (Math.abs(video.volume - video._rcDesiredVolume) > 0.001) {
@ -410,6 +420,13 @@
const v = visibleReel(); const v = visibleReel();
if (!v) return; if (!v) return;
// Auch bei Tastatur-Aktionen den pro-Video eingefrorenen
// Wunschstand neu aus der globalen Quelle übernehmen — sonst
// würde z. B. ↑ auf einem vorgeladenen Reel (_rcDesiredVolume
// noch 1) die globale Lautstärke fälschlich auf 1 zurücksetzen.
v._rcDesiredVolume = lastVolume;
v._rcUserMuted = lastMuted;
if (e.code === "Space") { if (e.code === "Space") {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();