爲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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章