Cambio de pushState: equivalente a Chrome Extension onHistoryStateUpdated
Estoy transfiriendo una extensión de Chrome a una extensión de Firefox y, debido a la naturaleza del sitio web en el que se ejecuta, necesito monitorear elpushState
.
Las extensiones de Chrome tienen una forma práctica de manejar esto:chrome.webNavigation.onHistoryStateUpdated
. La forma en que lo uso en la extensión de Chrome es la siguiente:
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);
});
}
});
Necesito hacer lo mismo para la extensión de Firefox, pero no he encontrado ninguna buena respuesta. He intentado hacer la respuesta mencionada aquí:¿Cómo recibir notificaciones sobre los cambios del historial a través de 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);
El problema es que cuando lo hagocfx run
se queja de quehistory/window is undefined
y por lo tanto nunca se detecta. Creo que esto se debe a que está dentro del SDK, pero no sé de una buena solución.
¿Alguna idea?
Editar: Miré la respuesta de @ willma a continuación y no creo que eso funcione para mí. El problema es que la URL se actualiza a través depushState
y el DOM no es ... ¿Hay alguna buena manera de replicar lo que hago en la extensión de Chrome?
Editar: Aquí está elpageMod
parte
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);
});
}
});