2016-12-11 2 views
1

Я хочу написать расширение Chrome, в котором вы вводите URL-адрес страницы, и перечисляет все имена файлов изображений, которые появляются на этой странице, с размерами файлов этих изображений, например. «Страница содержит изображения: 1.jpg (65KB), 2.png (135KB)». Как это может быть сделано? Я также хочу избежать расширения devtools.Список файлов всех изображений на странице (Расширение Chrome)

Я пробовал использовать API webRequest, но я не вижу возможности получить доступ к телу запросов. Размер изображения может быть отправлен в заголовке ответа, но это не гарантируется. Я попытался использовать AJAX для захвата данных изображения, но данные изображения, которые вы получаете, являются несжатой версией, и это не будет точным отражением фактического размера файла.

+0

Do вы ожидаете, что все изображения будут поданы с заголовком 'Access-Control-Allow-Origin'? – guest271314

+0

@ guest271314 Вы можете обойти это ограничение в расширениях Chrome, поэтому это не должно быть фактором. – fstr

ответ

4

Вы можете позвонить document.images получить изображения в document, используйте fetch(), Response.blob() вернуть Blob ответ изображения, проверить .size из Blob, получить имя изображения с URL() конструктору

let getImages =() => { 
 
    let images = Array.from(document.images); 
 
    return Promise.all(images.map(img => fetch(img.src) 
 
    .then(response => response.blob()))) 
 
    .then(blobs => { 
 
     return blobs.map((img, index) => { 
 
     let name = new URL(images[index].src).pathname.split("/").pop(); 
 
     name = !/\./.test(name) 
 
       ? name + "." + img.type.replace(/.+\/|;.+/g, "") 
 
       : name; 
 
     return { 
 
      name: name, 
 
      size: img.size 
 
     } 
 
     }); 
 
    }) 
 
} 
 

 
getImages() 
 
.then(images => console.log(JSON.stringify(images))) 
 
.catch(e => console.log(e))
<img src="https://placehold.it/10x10"> 
 
<img src="https://placehold.it/20x20">

+1

Удивительно, спасибо за усилия, чтобы написать код! – fstr

+0

Почему вы делаете 'let images = Array.from (document.images);' .Is 'document.images' не является допустимым массивом сам по себе? честный вопрос. –

+2

@ Geert-Jan ['document.images'] (https://html.spec.whatwg.org/multipage/dom.html#dom-document-images) возвращает' HTMLCollection'. – guest271314

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