Javascript 从扩展读取moz图标内容

Javascript 从扩展读取moz图标内容,javascript,firefox-addon,Javascript,Firefox Addon,我正在编写Firefox扩展,需要阅读“moz图标”(例如moz)的内容-icon://.img?size=16)URI 我有以下代码: const Cc = Components.classes; const Ci = Components.interfaces; var iOService = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var mozUri = iOService.new

我正在编写Firefox扩展,需要阅读“moz图标”(例如
moz)的内容-icon://.img?size=16
)URI

我有以下代码:

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(Ubuntu12.0 32位)上运行。尝试创建newChannelFromURI时失败(表示未实现)

除了创建一个频道外,还有其他方法读取moz图标URI的内容吗


(我已经在Mozillazine上发布了相同的问题,如果我在那里得到答案,我将更新此线程,反之亦然)

我非常确定
newChannelFromURI()
无法抛出
NS\u错误\u未实现
-此错误很可能是在您尝试调用
channel.open()
时抛出的。原因是并非所有通道都支持同步读取,通常也不鼓励同步读取。此外,更容易:

var-request=Cc[“@mozilla.org/xmlextas/xmlhttprequest;1”]
.createInstance(Ci.nsIXMLHttpRequest);
请求。打开(“GET”,“moz”-icon://.img?size=16“,对);
request.responseType=“arraybuffer”;
addEventListener(“加载”),函数(事件)
{
var arrayBuffer=request.response;
if(arrayBuffer){
var data=String.fromCharCode.apply(null,新的Uint8Array(arrayBuffer));
//对这里的数据做点什么
}
},假);
请求发送(空);

只是猜测相关性,但当我执行“对象中的道具”操作时,会为我引发NS_ERROR_NOT_IMPLEMENTED,其中对象是鼠标事件。“for/in”生成的不存在属性“end”和“windowHref”的“object[prop]”表达式中出现错误。

感谢您的回答,不幸的是,我得到了以下错误(尝试几乎一字不差地运行):“组件不可用”nsresult:“0x80040111(NS\u错误\u不可用)”。你上面的代码对你有用吗?@SunilAgrawal:Heh,你为什么不在留言中引用错误信息
NS\u ERROR\u NOT\u AVAILABLE
表示图标查找失败-Firefox不知道要显示什么图标,您无需下载。我尝试使用以下moz图标:“moz”-icon://stock/gtk-dialog-warning?size=dialog并在Firefox中测试了它(通过放入地址栏)的存在。因为我的一生都不知道我做错了什么,现在我的onload根本没有被调用。我这边肯定有些问题,但不知道是什么。我必须将新的XMLHttpRequest更改为“Components.classes['@mozilla.org/xmlextas/XMLHttpRequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest);”如果这有什么关系的话。@SunilAgrawal:我已经更改了示例,使其在沙盒环境中工作。特别是,我将
onload
替换为
addEventListener
。如果
加载
事件仍然没有触发,则很可能意味着
错误
事件会触发。感谢Wladimir,我们将在此处尝试并给出解决方案。与此同时,我也在Mozillazine上发布了这个问题,他们指出,这可能是我面临的bug。