在查阅如何注册新协议的过程中发现了一种定制自己的about页面的方式。感觉与添加新协议的过程极为相似。顺便尝试了一下,结果成功了。下面将其过程记录下来。
原始页面在:https://developer.mozilla.org/En/Custom_about:_URLs
该文章前面部分是针对firefox4之前的,也就是gecko2.0版本之前的,这里我就不描述了,第二部分是针对firefox4及之后版本的。到目前为止的firefox版本是支持的。作者给出的是一个模板,修改他的模板就可以实现了。下面是修改模板的具体步骤:
首先,按照编写extension的方式,建立文件目录,我使用之前做的一个hello world扩展来改编的,在扩展的目录下建立一个components目录。有的话就不用新建了。在components目录下新建一个javascript文件(例如:aboutSitename.js,我建立的文件为aboutgucasia.js),先将模板内容复制进去。
原始页面在:https://developer.mozilla.org/En/Custom_about:_URLs
该文章前面部分是针对firefox4之前的,也就是gecko2.0版本之前的,这里我就不描述了,第二部分是针对firefox4及之后版本的。到目前为止的firefox版本是支持的。作者给出的是一个模板,修改他的模板就可以实现了。下面是修改模板的具体步骤:
首先,按照编写extension的方式,建立文件目录,我使用之前做的一个hello world扩展来改编的,在扩展的目录下建立一个components目录。有的话就不用新建了。在components目录下新建一个javascript文件(例如:aboutSitename.js,我建立的文件为aboutgucasia.js),先将模板内容复制进去。
const Cc = Components.classes;
const Ci = Components.interfaces;
Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
function AboutSitename() { }
AboutSitename.prototype = {
classDescription: "about:sitename",
contractID: "@mozilla.org/network/protocol/about;1?what=sitename",
classID: Components.ID("{YOUR-UUID}"),
//Note: classID here should be exactly the same as CID in chrome.manifest
QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]),
getURIFlags: function(aURI) {
return Ci.nsIAboutModule.ALLOW_SCRIPT;
},
newChannel: function(aURI) {
let ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
let channel = ios.newChannel("chrome://CHROMEDIR",
null, null);
//Note:"chrome://CHROMEDIR" is like chrome://extension/content/aboutSitename.html Read more about chrome registration: https://developer.mozilla.org/en/Chrome_Registration
channel.originalURI = aURI;
return channel;
}
};
const NSGetFactory = XPCOMUtils.generateNSGetFactory([AboutSitename]);
第二步,在扩展的chrome.manifest文件末尾添加如下模板的内容:
component CIDrelative/file/location/of/file.js/whereever/you/put/it
contract@mozilla.org/network/protocol/about;1?what=sitename CID
例如,我添加的内容是:
component{09bde46b-739c-4a6d-8ffd-f170972db8c9} components/aboutgucasia.js
contract@mozilla.org/network/protocol/about;1?what=gucasia{09bde46b-739c-4a6d-8ffd-f170972db8c9}
这里的CID可以用很多工具生成,也可以使用网络工具生成,打开http://mozilla.pettay.fi/cgi-bin/mozuuid.pl即可获取一个CID,这里使用的CID也要与js文件中的CID相同。
第三步,修改js模板中需要改动的地方。按自己的需要进行修改。首先将chrome.manifest文件中使用的CID复制并替换模板中的YOUR-UUID。然后将sitename替换为你想要使用的字符串。我使用的是gucasia。应该只需要改动两个地方就可以了。不过我将Sitename和sitename都改成了gucasia。最后,将chrome://CHROMEDIR替换为你想要打开的网页,我使用的是http://www.ia.cas.cn/,后来又用http://www.baidu.com/试了一下。
修改完之后,将这个扩展复制到用来测试的profile的extensions目录下,用该profile打开firefox。在地址栏中输入about:sitename(本例输入about:gucasia)就可以打开chrome://CHROMEDIR指定的页面了。 这个与输入网址打开有些差别,不知道是什么原因。用浏览器输入网址浏览的时候是下面这样的: 而使用百度的时候却打开了跟平时一样的页面。