Подскажите как можно получить размер загруженной страницы из расширения.

Magneto
Мой ответ будет идентичен этому.

Для того чтоб получить вес загруженной страницы (это чистый html, без css, image и прочего) можно воспользоваться следующим скриптом:

Выделить код

Код:

function getPageSize() {
    var pageSize = null,
        cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService),
        httpCacheSession = cacheService.createSession("HTTP", 0, true);

    httpCacheSession.doomEntriesIfExpired = false;

    var cacheEntryDescriptor = httpCacheSession.openCacheEntry(content.document.location.toString().replace(/#.*$/, ""), Components.interfaces.nsICache.ACCESS_READ, false);

    if (cacheEntryDescriptor) {
        pageSize = Math.round(cacheEntryDescriptor.dataSize / 1024 * 100) / 100;
    }

    alert('Размер страницы ' + pageSize + 'KB');
}


// Ждем загрузки страницы
if (content.document && content.document.readyState === 'complete') {
    getPageSize();
} else {
    content.addEventListener('load', getPageSize, false);
}
Magneto пишет

чистый html

Magneto пишет

function … var … if

o_0, это что за HTML такой?

Magneto
Видимо он о том, что так можно получить вес самой страницы.

geczu пишет

можно получить вес самой страницы

Вес получить можно, но это не

чистый html

.

littleleshy
Не «получить вес с помощью чистого HTML», а «получить вес чистого HTML».

Sid
О, спс, разул глаза. Придирки к посту отменяются.

Выделить код

Код:

function getPageSize() {
    var pageSize = null,
        cacheService = Components.classes["@mozilla.org/network/cache-service;1"].getService(Components.interfaces.nsICacheService),
        httpCacheSession = cacheService.createSession("HTTP", 0, true);

    httpCacheSession.doomEntriesIfExpired = false;

    var cacheEntryDescriptor = httpCacheSession.openCacheEntry(content.document.location.toString().replace(/#.*$/, ""), Components.interfaces.nsICache.ACCESS_READ, false);

    if (cacheEntryDescriptor) {
        pageSize = Math.round(cacheEntryDescriptor.dataSize / 1024 * 100) / 100;
    }

    alert('Размер страницы ' + pageSize + 'KB');
}


// Ждем загрузки страницы
if (content.document && content.document.readyState === 'complete') {
    getPageSize();
} else {
    content.addEventListener('load', getPageSize, false);
}

В новых версиях Firefox вышеприведенный код перестал работать, вот ошибка:

Выделить код

Код:

Ошибка: NS_ERROR_NOT_AVAILABLE: Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsICacheSession.openCacheEntry]

Ошибка в этой строке:

Выделить код

Код:

var cacheEntryDescriptor = httpCacheSession.openCacheEntry(content.document.location.toString().replace(/#.*$/, ""), Components.interfaces.nsICache.ACCESS_READ, false);

Подскажите как решить.

okkamas_knife спасибо.

Выделить код

Код:

var pageSize         = null,
    nsICacheService  = Components.interfaces.nsICacheService,
    ACCESS_READ      = Components.interfaces.nsICache.ACCESS_READ,
    cacheService     = Components.classes["@mozilla.org/network/cache-service;1"].getService(nsICacheService),
    httpCacheSession = cacheService.createSession("HTTP", 0, true);

function openCacheEntry( url, callBack ) {
    var tries = 0,
        checkCacheListener = {
            onCacheEntryAvailable : function ( entry, access, status ) {
                if ( entry || tries === 1 ) {
                    callBack(entry);
                } else {
                    tries++;
                }
            }
        };

    httpCacheSession.asyncOpenCacheEntry( url, ACCESS_READ, checkCacheListener, true );
}

httpCacheSession.doomEntriesIfExpired = false;

openCacheEntry( content.document.location.toString().replace(/#.*$/, ""), function (cacheEntry) {
    if (cacheEntry) {
        pageSize = Math.round(cacheEntry.dataSize / 1024 * 100) / 100;
    }

    alert('Размер страницы ' + pageSize + 'KB');
} );