2016-05-28 4 views
0

Вот код, в одном из самых популярных расширений chrome для блокировки контента. Приложение должно блокировать загрузку изображений и делает отличную работу, но, скажем, я иду на страницу с 70-мегапиксельным изображением, для завершения загрузки страницы все равно требуется время?ChromeExtension, чтобы заблокировать загрузку + загрузку изображений

if (!localStorage.on) { 
    localStorage.on = '1'; 
} 

if (localStorage.on == '1') { 
    chrome.browserAction.setIcon({path: "images/icon19.png"}); 
} else { 
    chrome.browserAction.setIcon({path: "images/icon19-disabled.png"}); 
} 

chrome.browserAction.onClicked.addListener(function(tab) { 
    if (localStorage.on == '1') { 
     chrome.browserAction.setIcon({path: "images/icon19-disabled.png"}); 
     localStorage.on = '0'; 
    } else { 
     chrome.browserAction.setIcon({path: "images/icon19.png"}); 
     localStorage.on = '1'; 
    } 
}); 

chrome.webRequest.onBeforeRequest.addListener(function(details) { 
    if (localStorage.on == '1') { 
     return {redirectUrl: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=="}; 
    } 
}, {urls: ["http://*/*", "https://*/*"], types: ["image", "object"]}, ["blocking"]); 

chrome.tabs.onUpdated.addListener(function() { 
    if (localStorage.on == '1') { 
     chrome.tabs.insertCSS(null, {code: "img{visibility: hidden;}", runAt: "document_start"});  
    } 
}); 
+0

Не могли бы вы предоставить ссылку на расширение и на страницу, где вы испытываете такое поведение? –

+0

https://chrome.google.com/webstore/detail/block-image/pehaalcefcjfccdpbckoablngfkfgfgj?hl=ru – Iordanis

+0

http://www.conceptcarz.com/images/Jaguar/Jaguar-F-Pace-First-Edition-2015 -Image-03.jpg – Iordanis

ответ

2

Расширение только перехватывает запросы типа "image" и "object". Это означает, что он только блокирует загрузку изображений , встроенных на страницы.

Если вы пытаетесь загрузить изображение напрямую, используя его URL (например, тот, который вы указали в комментарии http://www.conceptcarz.com/images/Jaguar/Jaguar-F-Pace-First-Edition-2015-Image-03.jpg), изображение считается основным документом. Это означает, что запрашивается с ресурсом типа "main_frame", и расширение не будет блокировать его загрузку. Он просто скроет его, вставив стиль "img{visibility: hidden;}" на простую HTML-страницу, которую Chrome автоматически создает для изображения.

Вы можете проверить это, проверив сетевой трафик в Chrome (Ctrl + Shift + I> Сеть вверху> Ctr + Shift + R). Когда изображение загружается напрямую, оно не указано в разделе Img, но в разделе Doc.

Расширение может быть изменено для блокировки загрузки изображений даже при открытии напрямую путем добавления слушателя onBeforeSendHeaders и блокировки всего трафика на основе значения заголовка Content-Type. Я не уверен, что такая функция может быть полезной (за исключением, возможно, предотвращения использования нераспространенных данных).

+0

вы можете объяснить main_frame, sub_Frame и т. Д.? – Iordanis

+0

также, быстрее ли загружать страницу, если я перенаправляю или отменю: true, я также видел отмену: блок, документация действительно плохо не может найти много ресурсов:/ – Iordanis

+0

@ Иорданис: я не смог найти любая документация «resourceType». В документации даже не упоминаются [все возможные значения] (https://code.google.com/p/chromium/codesearch#chromium/src/extensions/browser/api/web_request/web_request_api_helpers.cc&q=extensions/browser/api/ web_request/web_request_api_helpers.cc & sq = package: chromium & l = 54) Я полагаюсь только на догадки: 'main_frame', вероятно, загружает основной документ. 'sub_frame', вероятно, загружает фреймы и т. д. –

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