मेनिफ़ेस्ट V3 में नेटवर्क अनुरोधों में बदलाव करना
मेनिफ़ेस्ट V3, एक्सटेंशन के नेटवर्क अनुरोधों में बदलाव करने के तरीके में बदलाव करता है. आपका एक्सटेंशन, नेटवर्क अनुरोधों को इंटरसेप्ट करने और chrome.webRequest
की मदद से रनटाइम पर उनमें बदलाव करने के बजाय, ऐसे नियम तय करता है जिनमें बताई गई शर्तें पूरी होने पर की जाने वाली कार्रवाइयों के बारे में बताया जाता है. इसके लिए, Declarative Net Request API का इस्तेमाल करें.
वेब अनुरोध एपीआई और नेटवर्क अनुरोध को मैनेज करने के लिए, निर्देश के बजाय सुझाव देने की अनुमति देने वाले एपीआई काफ़ी अलग हैं. एक फ़ंक्शन कॉल को दूसरे से बदलने के बजाय, आपको इस्तेमाल के उदाहरणों के हिसाब से अपना कोड फिर से लिखना होगा. इस सेक्शन में, इस प्रोसेस के बारे में बताया गया है.
मेनिफ़ेस्ट V2 में, वेब अनुरोधों को ब्लॉक करने से एक्सटेंशन और उनके साथ काम करने वाले पेजों की परफ़ॉर्मेंस, दोनों में काफ़ी कमी आ सकती है. webRequest
नेमस्पेस, संभावित रूप से ब्लॉक करने वाले नौ इवेंट के साथ काम करता है. इनमें से हर इवेंट में अनलिमिटेड इवेंट हैंडलर होते हैं. इससे भी बुरा यह है कि हर वेब पेज को कई एक्सटेंशन ब्लॉक कर सकते हैं. इसके लिए, ऐसी अनुमतियां चाहिए जो आपके निजता अधिकारों का उल्लंघन करती हैं. मेनिफ़ेस्ट V3, कॉलबैक को एलान वाले नियमों से बदलकर इस समस्या से बचाता है.
यह तीन सेक्शन में से दूसरा सेक्शन है. इसमें, एक्सटेंशन सेवा वर्कर्स का हिस्सा नहीं होने वाले कोड में किए जाने वाले ज़रूरी बदलावों के बारे में बताया गया है. इसमें, मेनिफ़ेस्ट V2 में इस्तेमाल होने वाले वेब अनुरोधों को, मेनिफ़ेस्ट V3 में इस्तेमाल होने वाले नेट अनुरोधों में बदलने के बारे में बताया गया है. इसके अलावा, अन्य दो सेक्शन में, मेनिफ़ेस्ट V3 में माइग्रेट करने के लिए ज़रूरी कोड अपडेट करना और सुरक्षा को बेहतर बनाने के बारे में बताया गया है.
अनुमतियां अपडेट करें
अपने manifest.json
में "permissions"
फ़ील्ड में ये बदलाव करें.
- अगर आपको अब नेटवर्क अनुरोधों को मॉनिटर करने की ज़रूरत नहीं है, तो
"webRequest"
अनुमति हटाएं. - मैच पैटर्न को
"permissions"
से"host_permissions"
पर ले जाएं.
आपको इस्तेमाल के उदाहरण के आधार पर, अन्य अनुमतियां जोड़नी होंगी. उन अनुमतियों के बारे में, उनके साथ काम करने वाले इस्तेमाल के उदाहरण के साथ बताया गया है.
नेटवर्क अनुरोध को मैनेज करने के लिए, निर्देश के बजाय सुझाव देने की अनुमति वाले नियम बनाना
डिक्लेरेटिव नेट अनुरोध के नियम बनाने के लिए, आपको अपने manifest.json
में "declarative_net_request"
ऑब्जेक्ट जोड़ना होगा. "declarative_net_request"
ब्लॉक में "rule_resource"
ऑब्जेक्ट की कैटगरी होती है, जो किसी नियम फ़ाइल पर ले जाती है. नियम फ़ाइल में, किसी कार्रवाई और उन शर्तों के बारे में बताने वाले ऑब्जेक्ट का कलेक्शन होता है जिनमें वे कार्रवाइयां लागू होती हैं.
इस्तेमाल के सामान्य उदाहरण
यहां दिए गए सेक्शन में, डेक्लेरेटिव नेट रिक्वेस्ट के सामान्य इस्तेमाल के उदाहरणों के बारे में बताया गया है. यहां दिए गए निर्देशों में सिर्फ़ खास जानकारी दी गई है. यहां दी गई सभी जानकारी के बारे में ज़्यादा जानकारी, chrome.declarativeNetRequest
में एपीआई रेफ़रंस में दी गई है
किसी एक यूआरएल को ब्लॉक करना
मेनिफ़ेस्ट V2 में, बैकग्राउंड स्क्रिप्ट में onBeforeRequest
इवेंट का इस्तेमाल करके, वेब अनुरोधों को ब्लॉक करना एक सामान्य इस्तेमाल का उदाहरण था.
chrome.webRequest.onBeforeRequest.addListener((e) => { return { cancel: true }; }, { urls: ["https://www.example.com/*"] }, ["blocking"]);
मेनिफ़ेस्ट V3 के लिए, "block"
ऐक्शन टाइप का इस्तेमाल करके नया declarativeNetRequest
नियम बनाएं. उदाहरण के तौर पर दिए गए नियम में "condition"
ऑब्जेक्ट पर ध्यान दें. इसका "urlFilter"
, webRequest
लिसनर को दिए गए urls
विकल्प की जगह ले लेता है. "resourceTypes"
कलेक्शन से, ब्लॉक किए जाने वाले रिसॉर्स की कैटगरी के बारे में पता चलता है. इस उदाहरण में, सिर्फ़ मुख्य एचटीएमएल पेज को ब्लॉक किया गया है. हालांकि, सिर्फ़ फ़ॉन्ट को भी ब्लॉक किया जा सकता है.
[ { "id" : 1, "priority": 1, "action" : { "type" : "block" }, "condition" : { "urlFilter" : "||example.com", "resourceTypes" : ["main_frame"] } } ]
यह काम करने के लिए, आपको एक्सटेंशन की अनुमतियां अपडेट करनी होंगी. manifest.json
में, "webRequestBlocking"
अनुमति को "declarativeNetRequest"
अनुमति से बदलें. ध्यान दें कि यूआरएल को "permissions"
फ़ील्ड से हटा दिया गया है, क्योंकि कॉन्टेंट को ब्लॉक करने के लिए, होस्ट की अनुमतियों की ज़रूरत नहीं होती. जैसा कि ऊपर दिखाया गया है, नियम फ़ाइल में उन होस्ट या होस्ट की जानकारी होती है जिन पर डिक्लेरेटिव नेट अनुरोध लागू होता है.
अगर आपको इसे आज़माना है, तो नीचे दिया गया कोड हमारे सैंपल रिपॉज़िटरी में उपलब्ध है.
"permissions": [ "webRequestBlocking", "https://*.example.com/*" ]
"permissions": [ "declarativeNetRequest", ]
एक से ज़्यादा यूआरएल रीडायरेक्ट करना
मेनिफ़ेस्ट V2 में, वेब अनुरोधों को रीडायरेक्ट करने के लिए BeforeRequest
इवेंट का इस्तेमाल करना एक आम उदाहरण था.
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"] );
मेनिफ़ेस्ट V3 के लिए, "redirect"
ऐक्शन टाइप का इस्तेमाल करें. पहले की तरह ही, "urlFilter"
, webRequest
लिसनर को पास किए गए url
विकल्प को बदल देता है. ध्यान दें कि इस उदाहरण में, नियम फ़ाइल के "action"
ऑब्जेक्ट में एक "redirect"
फ़ील्ड मौजूद है. इसमें यूआरएल को फ़िल्टर करने के बजाय, दिया जाने वाला यूआरएल है.
[ { "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"] } }
इस स्थिति के लिए, एक्सटेंशन की अनुमतियों में बदलाव करना भी ज़रूरी है. पहले की तरह, "webRequestBlocking"
अनुमति को "declarativeNetRequest"
अनुमति से बदलें. यूआरएल को फिर से manifest.json
से नियम फ़ाइल में ले जाया जाता है. ध्यान दें कि रीडायरेक्ट करने के लिए, होस्ट की अनुमति के साथ-साथ "declarativeNetRequestWithHostAccess"
की अनुमति भी ज़रूरी है.
अगर आपको इसे आज़माना है, तो नीचे दिया गया कोड हमारे सैंपल रिपॉज़िटरी में उपलब्ध है.
"permissions": [ "webRequestBlocking", "https://developer.chrome.com/docs/extensions/*", "https://developer.chrome.com/docs/extensions/reference" ]
"permissions": [ "declarativeNetRequestWithHostAccess" ], "host_permissions": [ "https://developer.chrome.com/*" ]
कुकी ब्लॉक करें
मेनिफ़ेस्ट V2 में, कुकी को ब्लॉक करने के लिए, वेब अनुरोध हेडर को भेजे जाने से पहले उन्हें इंटरसेप्ट करना और किसी खास हेडर को हटाना ज़रूरी है.
chrome.webRequest.onBeforeSendHeaders.addListener( function(details) { removeHeader(details.requestHeaders, 'cookie'); return {requestHeaders: details.requestHeaders}; }, // filters {urls: ['https://*/*', 'http://*/*']}, // extraInfoSpec ['blocking', 'requestHeaders', 'extraHeaders']);
मेनिफ़ेस्ट V3, नियम फ़ाइल में मौजूद नियम का इस्तेमाल करके भी ऐसा करता है. इस बार कार्रवाई का टाइप "modifyHeaders"
है. फ़ाइल "requestHeaders"
ऑब्जेक्ट का कलेक्शन लेती है, जिसमें बदलाव करने के लिए हेडर और उनके तरीके के बारे में बताया जाता है. ध्यान दें कि "condition"
ऑब्जेक्ट में सिर्फ़ "resourceTypes"
कलेक्शन होता है. यह पिछले उदाहरणों की तरह ही वैल्यू के साथ काम करता है.
अगर आपको इसे आज़माना है, तो नीचे दिया गया कोड हमारे सैंपल रिपॉज़िटरी में उपलब्ध है.
[ { "id": 1, "priority": 1, "action": { "type": "modifyHeaders", "requestHeaders": [ { "header": "cookie", "operation": "remove" } ] }, "condition": { "urlFilter": "|*?no-cookies=1", "resourceTypes": ["main_frame"] } } ]
इस स्थिति में, एक्सटेंशन की अनुमतियों में भी बदलाव करने होंगे. पहले की तरह, "webRequestBlocking"
अनुमति को "declarativeNetRequest"
अनुमति से बदलें.
"permissions": [ "webRequest", "webRequestBlocking", "https://*/*", "http://*/*" ],
"permissions": [ "declarativeNetRequest", ], "host_permissions": [ "" ]