Javascript 从扩展读取moz图标内容
我正在编写Firefox扩展,需要阅读“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
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。