1
我正在編寫Firefox擴展,需要閱讀'moz-icon'(例如moz-icon://.img?size=16
)URI的內容。從擴展中讀取moz圖標內容
我有下面的代碼:
const Cc = Components.classes;
const Ci = Components.interfaces;
var iOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
var mozUri = iOService.newURI('moz-icon://.img?size=16', null, null);
var channel = iOService.newChannelFromURI(mozUri);
var inputStream = channel.open(),
binaryInputStream =
Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci["nsIBinaryInputStream"]);
binaryInputStream.setInputStream(inputStream);
var data = [];
try {
while ((avail = binaryInputStream.available()) > 0)
data = data.concat(binaryInputStream.readByteArray(avail));
binaryInputStream.close(); inputStream.close();
} catch(e) {
}
它適用於Windows和Mac,但是不能工作在Linux(Ubuntu的12.0 32位)。嘗試創建newChannelFromURI時失敗(表示未實現)。
除了創建一個通道外,還有其他方式可以讀取moz-icon URI的內容嗎?
(我在Mozillazine上發佈了相同的問題,如果我在那裏得到答案,我會更新此線程,反之亦然)。
感謝您的回答,不幸的是,我得到以下錯誤(試圖幾乎逐字運行它):「組件不可用」 nsresult:「0x80040111(NS_ERROR_NOT_AVAILABLE)」。 您上面給出的代碼是否適合您? –
@SunilAgrawal:呵呵,你爲什麼不引用你的消息中的錯誤信息? 'NS_ERROR_NOT_AVAILABLE'表示圖標查找失敗 - Firefox不知道要顯示什麼圖標,無法爲您下載。 –
我嘗試了下面的moz-icon:'moz-icon:// stock/gtk-dialog-warning?size = dialog',並在Firefox中(通過放置地址欄)測試它確實存在。 對於我的生活無法弄清楚我做錯了什麼,現在我的onload根本不會被調用。在我的最後肯定有一些問題,但不知道是什麼。我必須將新XMLHttpRequest更改爲'Components.classes ['@ mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest);'如果這有任何關聯。 –