Die Chrome-Erweiterung wird bei der Browsernavigation bei YouTube nicht geladen

8

Nehmen wir an, ich habe eine Erweiterung, die geladen wird, wenn Sie auf einer YouTube-Videoseite ankommen. Ich habe festgestellt, dass die Erweiterung höchstwahrscheinlich nicht geladen wird, wenn man mit den Chrome-Tasten hin und her navigiert.

Als Beispiel habe ich 2 Dateien, das Manifest:

%Vor%

und das Inhaltsverzeichnis

%Vor%

Die Warnung wird beim Navigieren nicht immer angezeigt. Wie kann ich das überwinden, so dass die Erweiterung jedes Mal geladen wird?

    
abinop 23.08.2013, 08:12
quelle

1 Antwort

17

YouTube hat eine Testversion mit pushState-basierter Navigation gestartet. Im Allgemeinen können solche Navigationen nur in Inhaltsskripten erkannt werden, indem Code eingefügt wird, der Aufrufe von history.replaceState / history.pushState abfängt (oder mithilfe von chrome.webNavigation.onHistoryStateUpdated Ereignis auf der Hintergrundseite).

Der Rest dieser Antwort ist spezifisch für YouTube.
YouTube zeigt beim Laden einen (roten) Fortschrittsbalken oben auf der Seite an. Dieser Fortschrittsbalken wird mit einem CSS-Übergang animiert. Da Übergangsereignisse platzen, können Sie einen Übergangsereignis-Listener an <body> binden und in diesen Fällen die Navigation überprüfen.

Sie müssen Ihr Inhaltsskript bei *://www.youtube.com/* anstelle von *://www.youtube.com/watch* einfügen, da pushState verwendet werden kann, um von / nach /watch.. zu navigieren.

%Vor%

Hinweis: Diese Methode hängt davon ab, dass der Fortschrittsbalken eingefügt wird. Immer wenn Google beschließt, die ID der Fortschrittsanzeige umzubenennen oder die Fortschrittsleiste vollständig zu entfernen, funktioniert Ihr Code nicht mehr.

Hinweis 2: Dies funktioniert nur für aktive Registerkarten. Wenn Sie Navigationsänderungen erkennen müssen, während die Registerkarte nicht fokussiert ist, müssen Sie ein Ereignis window.onfocus und window.onblur binden und überprüfen, ob document.title sich zwischen diesen Ereignissen geändert hat.

    
Rob W 23.08.2013, 09:04
quelle