为firefox定制about页面的URL

在查阅如何注册新协议的过程中发现了一种定制自己的about页面的方式。感觉与添加新协议的过程极为相似。顺便尝试了一下,结果成功了。下面将其过程记录下来。
原始页面在: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

[email protected]/network/protocol/about;1?what=sitename CID
例如,我添加的内容是:

component{09bde46b-739c-4a6d-8ffd-f170972db8c9} components/aboutgucasia.js

[email protected]/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指定的页面了。这个与输入网址打开有些差别,不知道是什么原因。用浏览器输入网址浏览的时候是下面这样的:而使用百度的时候却打开了跟平时一样的页面。
发布了32 篇原创文章 · 获赞 83 · 访问量 29万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章