Firefox Addon SDK - 如何创建一个关于:页面
Firefox Addon SDK - How to create an about: page
我需要创建一个 about: 页面,以显示插件选项。我以前看过 ti,但是 SDK 中似乎没有允许您这样做的选项。
有没有其他方法可以让用户输入 about:pagename 并转到我的页面?
我不想将 URL 为 about:pagename
的所有选项卡重定向到另一个选项页面。
提前致谢
这是使用 jpm
开发的无重启插件的 index.js
文件:
const { Cc, Ci, Cr, Cu, Cm, components } = require("chrome");
Cm.QueryInterface(Ci.nsIComponentRegistrar);
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
// globals
var factory;
const aboutPage_description = 'This is my custom about page';
const aboutPage_id = '6c098a80-9e13-11e5-a837-0800200c9a66'; // make sure you generate a unique id from https://www.famkruithof.net/uuid/uuidgen
const aboutPage_word = 'foobar';
const aboutPage_page = Services.io.newChannel('data:text/html,hi this is the page that is shown when navigate to about:foobar', null, null);
function AboutCustom() {};
AboutCustom.prototype = Object.freeze({
classDescription: aboutPage_description,
contractID: '@mozilla.org/network/protocol/about;1?what=' + aboutPage_word,
classID: components.ID('{' + aboutPage_id + '}'),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
getURIFlags: function(aURI) {
return Ci.nsIAboutModule.ALLOW_SCRIPT;
},
newChannel: function(aURI) {
let channel = aboutPage_page;
channel.originalURI = aURI;
return channel;
}
});
function Factory(component) {
this.createInstance = function(outer, iid) {
if (outer) {
throw Cr.NS_ERROR_NO_AGGREGATION;
}
return new component();
};
this.register = function() {
Cm.registerFactory(component.prototype.classID, component.prototype.classDescription, component.prototype.contractID, this);
};
this.unregister = function() {
Cm.unregisterFactory(component.prototype.classID, this);
}
Object.freeze(this);
this.register();
}
exports.main = function() {
factory = new Factory(AboutCustom);
};
exports.onUnload = function(reason) {
factory.unregister();
};
基本上它注册了一个自定义的关于页面,当您访问 about:foobar
时将加载该页面。加载的页面只是一行文本。
这是它的样子:
您可以在此处查看工作示例:https://github.com/matagus/about-foobar-addon
如果您使用 addons-sdk:
,我认为这是一个更好的解决方案
致谢:
var pageMod = require("page-mod");
pageMod.PageMod({
include: data.url("options.html"),
...
});
var tabs = require("tabs");
tabs.open(data.url("options.html"));
但还有其他方法。您可以查看实现此功能的 Scroll to Top
插件:https://addons.mozilla.org/firefox/addon/402816
我需要创建一个 about: 页面,以显示插件选项。我以前看过 ti,但是 SDK 中似乎没有允许您这样做的选项。
有没有其他方法可以让用户输入 about:pagename 并转到我的页面?
我不想将 URL 为 about:pagename
的所有选项卡重定向到另一个选项页面。
提前致谢
这是使用 jpm
开发的无重启插件的 index.js
文件:
const { Cc, Ci, Cr, Cu, Cm, components } = require("chrome");
Cm.QueryInterface(Ci.nsIComponentRegistrar);
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
// globals
var factory;
const aboutPage_description = 'This is my custom about page';
const aboutPage_id = '6c098a80-9e13-11e5-a837-0800200c9a66'; // make sure you generate a unique id from https://www.famkruithof.net/uuid/uuidgen
const aboutPage_word = 'foobar';
const aboutPage_page = Services.io.newChannel('data:text/html,hi this is the page that is shown when navigate to about:foobar', null, null);
function AboutCustom() {};
AboutCustom.prototype = Object.freeze({
classDescription: aboutPage_description,
contractID: '@mozilla.org/network/protocol/about;1?what=' + aboutPage_word,
classID: components.ID('{' + aboutPage_id + '}'),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
getURIFlags: function(aURI) {
return Ci.nsIAboutModule.ALLOW_SCRIPT;
},
newChannel: function(aURI) {
let channel = aboutPage_page;
channel.originalURI = aURI;
return channel;
}
});
function Factory(component) {
this.createInstance = function(outer, iid) {
if (outer) {
throw Cr.NS_ERROR_NO_AGGREGATION;
}
return new component();
};
this.register = function() {
Cm.registerFactory(component.prototype.classID, component.prototype.classDescription, component.prototype.contractID, this);
};
this.unregister = function() {
Cm.unregisterFactory(component.prototype.classID, this);
}
Object.freeze(this);
this.register();
}
exports.main = function() {
factory = new Factory(AboutCustom);
};
exports.onUnload = function(reason) {
factory.unregister();
};
基本上它注册了一个自定义的关于页面,当您访问 about:foobar
时将加载该页面。加载的页面只是一行文本。
这是它的样子:
您可以在此处查看工作示例:https://github.com/matagus/about-foobar-addon
如果您使用 addons-sdk:
,我认为这是一个更好的解决方案致谢:
var pageMod = require("page-mod");
pageMod.PageMod({
include: data.url("options.html"),
...
});
var tabs = require("tabs");
tabs.open(data.url("options.html"));
但还有其他方法。您可以查看实现此功能的 Scroll to Top
插件:https://addons.mozilla.org/firefox/addon/402816