我需要在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文件吗?
答案 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家伙,这可能会失败,所以你可能不得不在实施后调整它,但我很确定它在正确的方向