Firefox插件:新标签扩展程序

时间:2014-06-30 09:52:53

标签: javascript firefox javascript-events firefox-addon firefox-addon-sdk

我需要在Firefox中打开新标签时执行一些操作。我使用的是addon-sdk,而且我对firefox扩展开发完全不了解。

我在商店中下载了一些新的标签扩展程序,将其解压缩,其中大多数都使用此类代码:

var newtab = {
    init: function ()
    {
        gBrowser.addEventListener("NewTab", newtab.opentab, false);
    },

    opentab: function (aEvent)
    {
        // action here
    }
}

window.addEventListener( "load", newtab.init, false);

他们正在订阅窗口的加载事件,然后他们保证让gBrowser订阅新的标签页打开事件。

当我尝试这样做时,我得到了:

  

消息:ReferenceError:窗口未定义

据我所知,在这种情况下没有窗口对象。

Firefox Addon-sdk. On page load

StackOverflow – Firefos Addon: eventlistener: windows is not defined

根据sdk和SO的回答,可以这样描述,我的扩展和商店下载的扩展(以及上面的主题)之间的唯一区别,我还没有任何xul文件,因为我没有任何UI

我还尝试使用SO answer Firefox Add-On window.addEventListener error: window not defined中的代码,但Firefox崩溃了。

如何正确行事?如果我没有UI,我应该有任何xul文件吗?

2 个答案:

答案 0 :(得分:4)

你引用的Thar代码是常规的XUL覆盖代码,并不适用于SDK(嗯,可以通过跳过很多箍来使它在SDK中工作,但是那个' s除此之外)。

SDK提供了用于处理sdk/tabs模块中的标签的API。你应该使用它。

答案 1 :(得分:3)

试试这个:

var data = require('sdk/self').data;

require('sdk/page-mod').PageMod({
  include: ["about:newtab"],
  //contentScriptFile: [data.url('cs.js')], // <<< you dont need this unless you want to run stuff inside the about:newtab page
  attachTo: ["existing", "top"], // <<<< im not sure what this does
  onAttach: function(worker) {
    worker.port.emit('attached', true);
  }
});

self.port.on('attached', function() {
  console.log('new tab page loaded!!!');
});
免责声明:我不是一个sdk家伙,这可能会失败,所以你可能不得不在实施后调整它,但我很确定它在正确的方向