Firefox addon-sdk - 监听页面导航

Ada*_*ath 9 javascript firefox-addon firefox-addon-sdk

我正在尝试使用addon-sdk将Chrome插件移植到Firefox,但我无法找到等效的方法来收听标签导航事件.

我需要做的是保持每页数据(从DOM检测到),并在用户导航到选项卡中的新页面时立即删除(但是,在刷新时保持数据)

我Chrome,当标签更改网址时执行某些操作,我可以使用:

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

在使用addon-sdk的Firefox中我试过使用:

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

问题是我无法挂钩初始导航事件,因此在用户开始导航和准备好新页面的DOM之间,旧数据可用.

基本上我需要一种方法来勾选选项卡的初始导航,理想情况下看看它的位置(就像我在Chrome中一样).

有什么想法吗?

Ben*_*ris 11

目前无法通过选项卡检测页面加载.但是,你可以使用page-mods中的start事件来完成它.我也有兴趣以正确的方式做到这一点,所以如果你找到一种不使用page-mods的方法,请点击我:

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();
        }
    }
);
Run Code Online (Sandbox Code Playgroud)

另外,我不知道onAttach触发器的速度,就像在ff扩展中传递的所有消息一样,它可能会增加一些时间(可能是150毫秒?如果您对此有基准,请回复我)

  • @AdamHeath是的,Mozilla和Chromium的人们就共同的API达成一致意见,编写规范的HTML5流程风格会很棒. (2认同)