Manifest V3'te ağ isteklerini değiştirme
Manifest V3, uzantıların ağ isteklerinde yapılan değişiklikleri işleme şeklini değiştirir. Uzantınız, ağ isteklerine müdahale etmek ve bunları çalışma zamanında chrome.webRequest
ile değiştirmek yerine, belirli bir koşul kümesi karşılandığında gerçekleştirilecek işlemleri açıklayan kurallar belirtir. Bu işlemi Declarative Net Request API'yi kullanarak yapın.
Web Request API ve Declarative Net Request API'leri birbirinden önemli ölçüde farklıdır. Bir işlev çağrısını başka bir işlev çağrısıyla değiştirmek yerine, kodunuzu kullanım alanları açısından yeniden yazmanız gerekir. Bu bölüm, bu süreçte size yol gösterecektir.
Manifest V2'de, web isteklerini engellemek hem uzantıların performansını hem de birlikte çalıştıkları sayfaların performansını önemli ölçüde düşürebilir. webRequest
ad alanı, her biri sınırsız sayıda etkinlik işleyici gerektiren dokuz potansiyel olarak engelleme etkinliği destekler. İşin daha da kötüsü, her web sayfası potansiyel olarak birden fazla uzantı tarafından engelleniyor ve bunun için gereken izinler engelleniyor. Manifest V3, geri çağırmaları bildirim temelli kurallarla değiştirerek bu soruna karşı koruma sağlar.
Bu, uzantı hizmet çalışanının parçası olmayan kod için gerekli değişiklikleri açıklayan üç bölümden ikincisidir. Bu bölümde, Manifest V2 tarafından kullanılan engelleme web isteklerinin Manifest V3 tarafından kullanılan bildirim temelli net isteklere dönüştürülmesi açıklanmaktadır. Diğer iki bölümde, Manifest V3'e geçmek için gereken kodunuzu güncelleme ve güvenliği iyileştirme konularına yer verilmiştir.
İzinleri güncelle
manifest.json
hesabınızdaki "permissions"
alanında aşağıdaki değişiklikleri yapın.
- Artık ağ isteklerini gözlemlemeniz gerekmiyorsa
"webRequest"
iznini kaldırın. - Eşleşme Kalıplarını
"permissions"
kuruluş biriminden"host_permissions"
kuruluş birimine taşıyın.
Kullanım alanınıza bağlı olarak başka izinler eklemeniz gerekir. Bu izinler, destekledikleri kullanım alanıyla açıklanmaktadır.
Bildirim temelli net istek kuralları oluşturma
Bildirim temelli net istek kuralları oluşturmak için manifest.json
öğenize "declarative_net_request"
nesnesi eklemeniz gerekir. "declarative_net_request"
bloğu, bir kural dosyasına işaret eden "rule_resource"
nesne dizisi içeriyor. Kural dosyası, bir işlemi ve bu işlemlerin çağrıldığı koşulları belirten bir nesne dizisi içerir.
Yaygın kullanım alanları
Aşağıdaki bölümlerde bildirim temelli net isteklerin yaygın kullanım alanları açıklanmaktadır. Aşağıdaki talimatlar yalnızca kısa bir özet içermektedir. Buradaki tüm bilgiler hakkında daha fazla bilgiyi chrome.declarativeNetRequest
altındaki API referansında bulabilirsiniz.
Tek bir URL'yi engelleme
Manifest V2'de yaygın bir kullanım alanı, arka plandaki komut dosyasını kullanan onBeforeRequest
etkinliğini kullanarak web isteklerini engellemekti.
chrome.webRequest.onBeforeRequest.addListener((e) => { return { cancel: true }; }, { urls: ["https://www.example.com/*"] }, ["blocking"]);
Manifest V3 için "block"
işlem türünü kullanarak yeni bir declarativeNetRequest
kuralı oluşturun. Örnek kuraldaki "condition"
nesnesine dikkat edin. "urlFilter"
, webRequest
işleyiciye iletilen urls
seçeneğinin yerini alır. "resourceTypes"
dizisi, engellenecek kaynakların kategorisini belirtir. Bu örnek yalnızca ana HTML sayfasını engeller ancak örneğin yalnızca yazı tiplerini engelleyebilirsiniz.
[ { "id" : 1, "priority": 1, "action" : { "type" : "block" }, "condition" : { "urlFilter" : "||example.com", "resourceTypes" : ["main_frame"] } } ]
Bu işlevin çalışması için uzantının izinlerini güncellemeniz gerekir. manifest.json
bölümünde "webRequestBlocking"
iznini "declarativeNetRequest"
izniyle değiştirin. İçeriği engellemek ana makine izinleri gerektirmediğinden URL'nin "permissions"
alanından kaldırıldığına dikkat edin. Yukarıda gösterildiği gibi kural dosyası, bildirim temelli net isteğinin geçerli olduğu ana makineyi veya ana makineleri belirtir.
Bunu denemek isterseniz aşağıdaki kodu örnekler depomuzda bulabilirsiniz.
"permissions": [ "webRequestBlocking", "https://*.example.com/*" ]
"permissions": [ "declarativeNetRequest", ]
Birden çok URL'yi yönlendirme
Manifest V2'deki bir diğer yaygın kullanım alanı, web isteklerini yönlendirmek için BeforeRequest
etkinliğinin kullanılmasıydı.
chrome.webRequest.onBeforeRequest.addListener((e) => { console.log(e); return { redirectUrl: "https://developer.chrome.com/docs/extensions/mv3/intro/" }; }, { urls: [ "https://developer.chrome.com/docs/extensions/mv2/" ] }, ["blocking"] );
Manifest V3 için "redirect"
işlem türünü kullanın. Daha önce olduğu gibi "urlFilter"
, webRequest
işleyiciye iletilen url
seçeneğinin yerini alır. Bu örnekte, kural dosyasının "action"
nesnesinin, filtrelenen URL yerine döndürülecek URL'yi içeren bir "redirect"
alanı içerdiğine dikkat edin.
[ { "id" : 1, "priority": 1, "action": { "type": "redirect", "redirect": { "url": "https://developer.chrome.com/docs/extensions/mv3/intro/" } }, "condition": { "urlFilter": "https://developer.chrome.com/docs/extensions/mv2/", "resourceTypes": ["main_frame"] } }
Bu senaryo, uzantının izinlerinde de değişiklik yapılmasını gerektirir. Daha önce olduğu gibi "webRequestBlocking"
iznini "declarativeNetRequest"
izniyle değiştirin. URL'ler tekrar manifest.json
klasöründen bir kural dosyasına taşınır. Yönlendirme için ana makine izninin yanı sıra "declarativeNetRequestWithHostAccess"
izni de gerektiğini unutmayın.
Bunu denemek isterseniz aşağıdaki kodu örnekler depomuzda bulabilirsiniz.
"permissions": [ "webRequestBlocking", "https://developer.chrome.com/docs/extensions/*", "https://developer.chrome.com/docs/extensions/reference" ]
"permissions": [ "declarativeNetRequestWithHostAccess" ], "host_permissions": [ "https://developer.chrome.com/*" ]
Çerezleri engelle
Manifest V2'de çerezlerin engellenmesi, gönderilmeden önce web isteği üstbilgilerine müdahale ederek belirli başlıkların kaldırılmasını gerektirir.
chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { removeHeader(details.requestHeaders, 'cookie'); return {requestHeaders: details.requestHeaders}; }, // filters {urls: ['https://*/*', 'http://*/*']}, // extraInfoSpec ['blocking', 'requestHeaders', 'extraHeaders']);
Manifest V3, bunu bir kural dosyasındaki bir kuralla da yapar. Bu sefer işlem türü "modifyHeaders"
. Dosya, değiştirilecek başlıkları ve bunların nasıl değiştirileceğini belirten bir "requestHeaders"
nesne dizisi alır. "condition"
nesnesinin yalnızca bir "resourceTypes"
dizisi içerdiğine dikkat edin. Önceki örneklerle aynı değerleri destekler.
Bunu denemek isterseniz aşağıdaki kodu örnekler depomuzda bulabilirsiniz.
[ { "id": 1, "priority": 1, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "cookie", "operation": "remove" } ] }, "condition": { "urlFilter": "|*?no-cookies=1", "resourceTypes": ["main_frame"] } } ]
Bu senaryo, uzantının izinlerinde de değişiklik yapılmasını gerektirir. Daha önce olduğu gibi "webRequestBlocking"
iznini "declarativeNetRequest"
izniyle değiştirin.
"permissions": [ "webRequest", "webRequestBlocking", "https://*/*", "http://*/*" ],
"permissions": [ "declarativeNetRequest", ], "host_permissions": [ "" ]