pushState change - Entspricht der Chrome-Erweiterung onHistoryStateUpdated
Ich portiere eine Chrome-Erweiterung auf eine Firefox-Erweiterung. Aufgrund der Art der Website, auf der sie ausgeführt wird, muss ich diepushState
.
Chrome Extensions bietet eine praktische Möglichkeit, dies zu handhaben:chrome.webNavigation.onHistoryStateUpdated
. Die Art und Weise, wie ich es in der Chrome-Erweiterung verwende, ist wie folgt:
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
var tabUrl = details.url;
if (isTabUrlValid(tabUrl)) {
$.get(tabUrl, function(data) {
var videoUrl = $(data).find('meta[itemprop=contentURL]').prop('content');
videoUrl = validateUrl(videoUrl);
videoUrl5k = make5kUrl(videoUrl);
});
}
});
Ich muss dasselbe für die Firefox-Erweiterung tun, aber ich habe keine guten Antworten gefunden. Ich habe versucht, die hier erwähnte Antwort zu machen:Wie erhalte ich eine Benachrichtigung über Änderungen des Verlaufs über history.pushState?
(function(history) {
var pushState = history.pushState;
history.pushState = function(state) {
if (typeof history.onpushstate == "function") {
history.onpushstate({state: state});
}
var tabUrl = tabs.activeTab.url;
console.log("UPDATED TAB URL: " + tabUrl);
if (isTabUrlValid(tabUrl)) {
$.get(tabUrl, function(data) {
var videoUrl = $(data).find('meta[itemprop=contentURL]').prop('content');
videoUrl = validateUrl(videoUrl);
videoUrl5k = make5kUrl(videoUrl);
});
}
return pushState.apply(history, arguments);
};
})(window.history);
Das Problem ist, dass, wenn ichcfx run
es beschwert sich, dasshistory/window is undefined
und wird daher nie erkannt. Ich denke, das liegt daran, dass es im SDK enthalten ist, aber ich kenne keine gute Problemumgehung.
Irgendwelche Gedanken?
Edit: Ich habe mir die Antwort von @ willma unten angesehen und glaube nicht, dass das bei mir funktionieren würde. Das Problem ist, dass die URL über @ aktualisiert wipushState
und das DOM ist nicht ... Gibt es eine gute Möglichkeit, das zu replizieren, was ich in der Chrome-Erweiterung mache?
Bearbeiten: Hier ist daspageMod
portion
pageMod.PageMod({
attachTo: 'top', // Don't attach to iFrames --> http://goo.gl/b6b1Iv
include: [URLs],
contentScriptFile: [data.url("jquery-2.1.1.min.js"),
data.url("csScript.js")],
onAttach: function(worker) {
worker.port.on('url', function(url) {
var videoUrl = validateUrl(url);
videoUrl5k = make5kUrl(videoUrl);
console.log("--5K URL--: " + videoUrl5k);
});
}
});