2015-06-11 2 views
1

Я используюnsICacheService не работает в Firefox 38

Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService); 

манипулировать кэш HTTP при разработке расширения Firefox.

Но после того, как обновление до Firefox 38 ESR, этот интерфейс бросает ошибку при вызове его функции

[Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsICacheService.visitEntries]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" 

И я не нашел его устаревшим в MDN, так кто-нибудь знает почему? Большое спасибо.

+0

Это очень крутая работа, материал кеша не так хорошо документирован на MDN, вы видели эту тему: http://stackoverflow.com/questions/27842615/how-to-find-specific-cache-entries -in-firefox-and-turn-them-in-file-or-blob - это не совсем ваша проблема, но ее кеш тоже работает. Не могли бы вы ссылаться на ваш открытый исходный код, мне очень любопытно узнать, как использовать nsICacheService – Noitidart

ответ

1

http://code.metager.de/source/xref/mozilla/firefox/netwerk/cache/nsICacheService.idl

Это выглядит как намек * @throws NS_ERROR_NOT_IMPLEMENTED когда v2 кэш предпочитаемое использовать.

https://bugzilla.mozilla.org/show_bug.cgi?id=913807

Я имею в виду, что все, что нам нужно сделать, это изменение 1 к 2 в этой линии в

вар cacheService = куб.см [ "@ mozilla.org/network/cache-service; 1 "] .getService (ci.nsICacheService);

0

Я попробовал этот код и он бросает: (копия пасты работать в scratcpad в среде браузера - https://www.youtube.com/watch?v=oo4STWceGTM)

var cacheService = Cc["@mozilla.org/network/cache-service;1"].getService(Ci.nsICacheService); 
console.log('cacheService:', cacheService); 

function CacheVisitor(){} 

CacheVisitor.prototype = { 
    QueryInterface : function(iid) 
    { 
     if (iid.equals(Ci.nsICacheVisitor)) 
      return this; 
     throw Components.results.NS_NOINTERFACE; 
    }, 

    visitDevice : function(deviceID, deviceInfo) 
    { 
     console.log("[visiting device (deviceID = ", deviceID ,", description = ", deviceInfo.description ,")]"); 
     return true; 
    }, 

    visitEntry : function(deviceID, entryInfo) 
    { 
     console.log("[visiting entry (clientID = ", entryInfo.clientID, "key = ", entryInfo.key, ")]"); 
     return true; 
    } 
}; 
var visitor = new CacheVisitor(); 
cacheService.visitEntries(visitor); // throws on this line here!!! 

Он бросает на линии cacheService.visitEntries(visitor); // throws on this line here!!! он бросает это:

/* 
Exception: [Exception... "Component returned failure code: 0x80004001 (NS_ERROR_NOT_IMPLEMENTED) [nsICacheService.visitEntries]" nsresult: "0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" location: "JS frame :: Scratchpad/1 :: <TOP_LEVEL> :: line 27" data: no] 
*/ 

Это та же проблема, с которой вы похожи. Можете ли вы проверить, я не вижу воспроизводимого кода от вас.

+0

да, точно так же, как ваш код, при вызове cacheService.visitEntries() он выдает ошибку. –

+1

от MozillaZine, они говорят мне, что nsICacheService помечен для удаления. подробности: http://forums.mozillazine.org/viewtopic.php?f=19&t=2940611 –

+1

В приведенном выше коде visitEntries() не определен, только visitEntry() - это, возможно, проблема? –

Смежные вопросы