Firefox addon-sdk - прослушивание навигации по страницам - PullRequest
9 голосов
/ 27 февраля 2012

Я пытаюсь перенести плагин Chrome в Firefox с помощью addon-sdk и не могу найти эквивалентный метод для прослушивания событий навигации по вкладкам.

Что мне нужно сделать, это сохранить данные на странице (обнаруженоиз DOM) и удалите его, как только пользователь перейдет на новую страницу на вкладке (но сохранит данные при обновлении)

Я Chrome, чтобы сделать что-то, когда вкладка меняет URL, я могуuse:

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

В Firefox с использованием addon-sdk, который я пытался использовать:

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

Проблема в том, что я не могу подключиться к начальному событию навигации, поэтому междупользователь запускает навигацию и DOM новой страницы готов, старые данные доступны.

По сути, мне нужен способ подключиться к начальной навигации по вкладке и в идеале увидеть, куда она движется (как я могу)в Chrome).

Есть мысли?

Ответы [ 2 ]

11 голосов
/ 17 марта 2012

На данный момент нет способа обнаружить загрузку страницы с помощью вкладок.Однако вы можете сделать это с помощью события start в моде страниц.Я также заинтересован в том, чтобы сделать это правильно, поэтому, пожалуйста, пингуйте меня, если вы найдете способ без использования модов страниц:

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();
        }
    }
);

Кроме того, я не знаю о скорости триггера onAttach, как и для всех сообщений, передаваемых в расширениях ff, это может добавить некоторое время (может быть, 150 мс? пожалуйста, вернитесь ко мне, если у вас есть тест на это)

0 голосов
/ 03 августа 2014

Насколько я знаю, это должно охватывать все случаи открытия вкладок, переключения между вкладками и навигации по вкладкам. Глобальная переменная url должна всегда содержать URL активной вкладки, а вызов console.log должен регистрировать все события, которые на это влияют.

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);
...