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?
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.
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.
Tags und Links google-chrome-extension youtube content-script