Question

J'essaie de porter un plugin Chrome sur Firefox à l'aide de l'Addon-SDK et je ne trouve pas de méthode équivalente pour écouter les événements de navigation à l'onglet.

Ce que je dois faire, c'est conserver des données par page (détectées à partir du DOM) et supprimer cela dès que l'utilisateur se rendra à une nouvelle page dans l'onglet (mais, maintenez les données sur l'actualisation)

Je chrome, pour faire quelque chose lorsqu'un onglet change URL, je peux utiliser:

chrome.tabs.onUpdated.addListener(function(tab_id, changeInfo, tab) {
    if(changeInfo.status == 'loading' && changeInfo.url) {
        //DO STUFF AS THE URL CHANGED
    }
});

Dans Firefox en utilisant l'addon-sdk que j'ai essayé d'utiliser:

tabs.on('open', function(tab){
  tab.on('ready', function(tab){
    if(tab.cachedURL != tab.url) {
      //DO STUFF AND SET CACHE
    }
  });
});

Le problème est que je ne peux pas m'accrocher à l'événement de navigation initial, donc entre la navigation de démarrage de l'utilisateur et le dom de la nouvelle page étant prêt, les anciennes données sont disponibles.

Fondamentalement, j'ai besoin d'un moyen de m'accrocher à la navigation initiale d'un onglet et de voir idéalement où il va (tout comme je peux dans Chrome).

Des pensées?

Était-ce utile?

La solution

Pour le moment, il n'y a aucun moyen de détecter le chargement de pages avec des onglets. Cependant, vous pouvez le faire avec l'événement de démarrage dans des modes de page. Je suis également intéressé à le faire de la bonne manière, alors veuillez me faire un ping si vous trouvez un moyen sans utiliser de modes de page:

var pageMod = require("page-mod");
pageMod.PageMod({
    include: "*", // All DOM windows (ie. all pages + all iframes).
    contentScriptWhen: "start", // page starts loading, at this point you have
                                // the head of the document and no more
    contentScript: "", // inject no script, you can even omit this
    onAttach: function onAttach(worker) {
            if (worker.tab.url == worker.url) // test if at top level
                doStuff(worker.tab.url);
            // cleanup the attached worker
            worker.destroy();
        }
    }
);

De plus, je ne connais pas la vitesse du déclencheur d'Onattach, comme pour tous les messages passant dans les extensions FF, cela pourrait ajouter un peu de temps (peut-être 150 ms? Veuillez me revenir si vous avez une référence à ce sujet)

Autres conseils

Pour autant que je sache, cela devrait capturer tous les cas d'onglets d'ouverture, basculant entre les onglets et naviguer dans les onglets. La variable globale url doit contenir l'URL de l'onglet actif en tout temps, et le console.log L'appel doit enregistrer tous les événements qui affectent cela.

var tabs = require("sdk/tabs");
var url;

var updateURL = function (tab) {
  var oldURL = url;
  url = tab.url;
  console.log(oldURL+" --> "+url);
};

tabs.on("activate", updateURL);
tabs.on("pageshow", updateURL);

updateURL(tabs.activeTab);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top