Manifest V3'te ağ isteklerini değiştirme
Manifest V3, uzantıların ağ isteklerinin değiştirilmesini ele alma şeklini değiştirir. Uzantı, ağ isteklerini chrome.webRequest
ile durdurup çalışma zamanında değiştirmek yerine, belirli bir koşul grubu karşılandığında gerçekleştirilecek işlemleri açıklayan kurallar belirtir. Bunu Declarative Net Request API'yi kullanarak yapın.
Web İsteği API'si ile Bildirimsel Ağ İsteği API'leri ö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ümde, bu süreçte size yol gösterilmektedir.
Manifest V2'de web isteklerinin engellenmesi hem uzantıları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 alan dokuz potansiyel olarak engelleyen etkinliği destekler. Daha da kötüsü, her web sayfası birden fazla uzantı tarafından engellenebilir ve bunun için gereken izinler ise gizlilik ihlaline yol açar. Manifest V3, geri çağırma işlevlerini açıklayıcı kurallarla değiştirerek bu soruna karşı koruma sağlar.
Bu, uzantı hizmet işçisinin parçası olmayan kod için gereken değişiklikleri açıklayan üç bölümden ikincisidir. Bu makalede, Manifest V2 tarafından kullanılan engelleme web isteklerinin Manifest V3 tarafından kullanılan açıklayıcı net isteklere dönüştürülmesi açıklanmaktadır. Diğer iki bölümde ise Manifest V3'e geçiş için gereken kodunuzu güncelleme ve güvenliği iyileştirme konuları ele alınmaktadır.
İzinleri güncelle
manifest.json
dosyanı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şleme kalıplarını
"permissions"
'ten"host_permissions"
'e taşıyın.
Kullanım alanınıza bağlı olarak başka izinler eklemeniz gerekir. Bu izinler, destekledikleri kullanım alanıyla birlikte açıklanır.
Bildirimsel ağ isteği kuralları oluşturma
Açıklayıcı net istek kuralları oluşturmak için manifest.json
öğenize bir "declarative_net_request"
nesnesi eklemeniz gerekir. "declarative_net_request"
bloğu, bir kural dosyasını işaret eden bir "rule_resource"
nesnesi dizisi içerir. Kural dosyası, bir işlemi ve bu işlemlerin çağrıldığı koşulları belirten bir nesne dizisi içerir.
Yaygın kullanım örnekleri
Aşağıdaki bölümlerde, açıklayıcı net isteklerin yaygın kullanım alanları açıklanmaktadır. Aşağıdaki talimatlarda yalnızca kısa bir özet verilmiştir. Buradaki tüm bilgilerle ilgili 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 plan komut dosyasında 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
dinleyicisine iletilen urls
seçeneğinin yerini alır. "resourceTypes"
dizisi, engellenecek kaynak kategorisini belirtir. Bu örnekte yalnızca ana HTML sayfası engellenir ancak örneğin yalnızca yazı tiplerini engelleyebilirsiniz.
[ { "id" : 1, "priority": 1, "action" : { "type" : "block" }, "condition" : { "urlFilter" : "||example.com", "resourceTypes" : ["main_frame"] } } ]
Bunun için uzantının izinlerini güncellemeniz gerekir. manifest.json
bölümünde "webRequestBlocking"
iznini "declarativeNetRequest"
izniyle değiştirin. İçerik engellemek için ana makine izinleri gerekmediğinden URL'nin "permissions"
alanından kaldırıldığını unutmayın. Yukarıda gösterildiği gibi kural dosyası, açıklayıcı net isteğin geçerli olduğu ana makineyi veya ana makineleri belirtir.
Bunu denemek istiyorsanız aşağıdaki kodu örnekler deposunda bulabilirsiniz.
"permissions": [ "webRequestBlocking", "https://*.example.com/*" ]
"permissions": [ "declarativeNetRequest", ]
Birden çok URL'yi yönlendirme
Manifest V2'de yaygın olarak kullanılan bir diğer kullanım alanı da web isteklerini yönlendirmek için BeforeRequest
etkinliğini kullanmaktı.
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
dinleyicisine 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ğini unutmayın.
[ { "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 senaryoda, uzantının izinlerinde de değişiklik yapılması gerekir. Önceki 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 iznine ek olarak "declarativeNetRequestWithHostAccess"
izninin de gerekli olduğunu unutmayın.
Bunu denemek istiyorsanız aşağıdaki kodu örnekler deposunda 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 engelleme
Manifest V2'de çerezleri engellemek için web istek başlıklarının gönderilmeden önce yakalanması ve belirli bir başlığın kaldırılması gerekir.
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ında bir kuralla da yapar. Bu sefer işlem türü "modifyHeaders"
. Dosya, değiştirilecek üst bilgileri ve bunların nasıl değiştirileceğini belirten bir "requestHeaders"
nesnesi dizisi alır. "condition"
nesnesinin yalnızca bir "resourceTypes"
dizisi içerdiğini unutmayın. Önceki örneklerle aynı değerleri destekler.
Bunu denemek istiyorsanız aşağıdaki kodu örnekler deposunda bulabilirsiniz.
[ { "id": 1, "priority": 1, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "cookie", "operation": "remove" } ] }, "condition": { "urlFilter": "|*?no-cookies=1", "resourceTypes": ["main_frame"] } } ]
Bu senaryoda, uzantının izinlerinde de değişiklik yapılması gerekir. Önceki gibi, "webRequestBlocking"
iznini "declarativeNetRequest"
izniyle değiştirin.
"permissions": [ "webRequest", "webRequestBlocking", "https://*/*", "http://*/*" ],
"permissions": [ "declarativeNetRequest", ], "host_permissions": [ "" ]