Javascript 访问内存缓存项

Javascript 访问内存缓存项,javascript,firefox,caching,firefox-addon,xpcom,Javascript,Firefox,Caching,Firefox Addon,Xpcom,我正在编写一个Firefox扩展,需要访问Firefox内存缓存中的项目 以下是我正在使用的代码: nsICache = Components.interfaces.nsICache cacheservice = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService); cachesession = cacheservice.creat

我正在编写一个Firefox扩展,需要访问Firefox内存缓存中的项目

以下是我正在使用的代码:

nsICache = Components.interfaces.nsICache
cacheservice = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService);
cachesession = cacheservice.createSession("javascript", nsICache.STORE_IN_MEMORY, false);
cachesession.doomEntriesIfExpired=false;

//fileurl is captured from the nsIObserver and does print out correctly
cachedescriptor = cachesession.openCacheEntry( fileurl, nsICache.ACCESS_READ, false );
ERROR:NS_ERROR_CACHE_KEY_NOT_FOUND here
因为这是在后台获取的数据,所以我必须使用nsIObserver来捕获请求并捕获其URI以用作缓存键

如上所示,我得到了一个
NS\u ERROR\u CACHE\u KEY
未找到,尽管通过
about:CACHE
查看清楚地显示它在那里。我还使用了一个代理来强制缓存到磁盘,但我遇到了同样的问题(修改代码以查看磁盘缓存)。我认为这可能是因为缓存项仍在编写中,因此我制作了一个递归window.setTimeout来连续调用函数,但即使在下载完成后,我也会收到相同的错误

这可能是
nsicaCacheSession
的问题吗?可能我没有使用正确的
clientId
。如果是,我应该使用什么
clientId


我在这里真的不知所措,所以我希望你们能帮我。问题是客户ID。我使用“javascript”是因为我在一个示例中看到了它。原来我需要使用“HTTP”。

我实现了一个cacheVisitor来遍历所有缓存项,并使用cacheservice。visitEntries(cacheVisitor)确实返回了我要查找的对象,而cacheVisitor返回的密钥正是我尝试使用cachesession.openCacheEntry()访问它时使用的密钥。这让我觉得我访问它的方式有错误。然而,一切似乎都井然有序。我的意思是,我使用了(clientId,STORE_IN_MEMORY,false)和openCacheEntry(fileurl,ACCESS_READ,false),我使用了cacheVisitor来验证缓存条目。找到正确的键后,它会将其保存到全局变量中。当cacheVisitor完成时,保存的密钥将传递给openCacheEntry。再次,我得到了NS\u错误\u缓存\u密钥\u未找到。同样,它肯定在那里,但是为什么nsICacheSession找不到它呢?