ব্লকিং ওয়েব অনুরোধ শ্রোতাদের প্রতিস্থাপন করুন

ম্যানিফেস্ট V3 এক্সটেনশনগুলি নেটওয়ার্ক অনুরোধগুলির পরিবর্তন কীভাবে পরিচালনা করে তা পরিবর্তন করে। chrome.webRequest ব্যবহার করে রানটাইমে নেটওয়ার্ক অনুরোধগুলিকে আটকানো এবং পরিবর্তন করার পরিবর্তে, আপনার এক্সটেনশন এমন নিয়মগুলি নির্দিষ্ট করে যা নির্দিষ্ট শর্ত পূরণ হলে সম্পাদন করার জন্য ক্রিয়াগুলি বর্ণনা করে। Declarative Net Request API ব্যবহার করে এটি করুন।

ওয়েব রিকোয়েস্ট এপিআই এবং ডিক্লারেটিভ নেট রিকোয়েস্ট এপিআই উল্লেখযোগ্যভাবে আলাদা। একটি ফাংশন কলকে অন্য একটি দিয়ে প্রতিস্থাপন করার পরিবর্তে, আপনাকে ব্যবহারের ক্ষেত্রে আপনার কোডটি পুনর্লিখন করতে হবে। এই বিভাগটি আপনাকে সেই প্রক্রিয়াটি পরিচালনা করবে।

আপনার এক্সটেনশন যদি নীতি অনুসারে ইনস্টল করা থাকে তবে আপনাকে এই পরিবর্তনগুলি করার দরকার নেই। নীতি অনুসারে ইনস্টল করা এক্সটেনশনের জন্য, webRequestBlocking অনুমতি এখনও ম্যানিফেস্ট V3-তে উপলব্ধ।

এটি তিনটি বিভাগের মধ্যে দ্বিতীয়টি যা এক্সটেনশন সার্ভিস ওয়ার্কারের অংশ নয় এমন কোডের জন্য প্রয়োজনীয় পরিবর্তনগুলি বর্ণনা করে। এটি ম্যানিফেস্ট V2 দ্বারা ব্যবহৃত ব্লকিং ওয়েব অনুরোধগুলিকে ম্যানিফেস্ট V3 দ্বারা ব্যবহৃত ঘোষণামূলক নেট অনুরোধগুলিতে রূপান্তর করার বর্ণনা দেয়। অন্য দুটি বিভাগ ম্যানিফেস্ট V3 এ স্থানান্তরিত করার জন্য প্রয়োজনীয় কোড আপডেট করা এবং সুরক্ষা উন্নত করা কভার করে।

ভূমিকা

ম্যানিফেস্ট V2-তে, ওয়েব অনুরোধ ব্লক করলে এক্সটেনশনের কর্মক্ষমতা এবং তাদের সাথে কাজ করা পৃষ্ঠাগুলির কর্মক্ষমতা উল্লেখযোগ্যভাবে হ্রাস পেতে পারে। webRequest নেমস্পেস নয়টি সম্ভাব্য ব্লকিং ইভেন্ট সমর্থন করে, যার প্রতিটিতে সীমাহীন সংখ্যক ইভেন্ট হ্যান্ডলার লাগে। আরও খারাপের বিষয় হল, প্রতিটি ওয়েব পৃষ্ঠা সম্ভাব্যভাবে একাধিক এক্সটেনশন দ্বারা ব্লক করা হয় এবং এর জন্য প্রয়োজনীয় অনুমতিগুলি আক্রমণাত্মক। ম্যানিফেস্ট V3 কলব্যাকগুলিকে ঘোষণামূলক নিয়ম দিয়ে প্রতিস্থাপন করে এই সমস্যা থেকে রক্ষা করে।

অনুমতি আপডেট করুন

আপনার manifest.json এর "permissions" ফিল্ডে নিম্নলিখিত পরিবর্তনগুলি করুন।

  • যদি আপনার আর নেটওয়ার্ক অনুরোধগুলি পর্যবেক্ষণ করার প্রয়োজন না হয় তবে "webRequest" অনুমতিটি সরিয়ে ফেলুন।
  • "permissions" থেকে "host_permissions" এ ম্যাচ প্যাটার্নগুলি সরান।

আপনার ব্যবহারের ধরণ অনুসারে আপনাকে অন্যান্য অনুমতি যোগ করতে হবে। সেই অনুমতিগুলি তাদের সমর্থিত ব্যবহারের ধরণ অনুসারে বর্ণনা করা হয়েছে।

ঘোষণামূলক নেট অনুরোধের নিয়ম তৈরি করুন

ঘোষণামূলক নেট অনুরোধের নিয়ম তৈরি করার জন্য আপনার manifest.json এ একটি "declarative_net_request" অবজেক্ট যুক্ত করতে হবে। "declarative_net_request" ব্লকে "rule_resource" অবজেক্টের একটি অ্যারে রয়েছে যা একটি নিয়ম ফাইলকে নির্দেশ করে। নিয়ম ফাইলে একটি ক্রিয়া এবং সেই ক্রিয়াগুলি যে শর্তে প্রয়োগ করা হয় তা নির্দিষ্ট করে এমন অবজেক্টের একটি অ্যারে রয়েছে।

সাধারণ ব্যবহারের ক্ষেত্রে

নিম্নলিখিত বিভাগগুলিতে ঘোষণামূলক নেট অনুরোধের সাধারণ ব্যবহারের ঘটনাগুলি বর্ণনা করা হয়েছে। নীচের নির্দেশাবলী কেবল একটি সংক্ষিপ্ত রূপরেখা প্রদান করে। এখানে সমস্ত তথ্য সম্পর্কে আরও তথ্য chrome.declarativeNetRequest এর অধীনে API রেফারেন্সে বর্ণিত হয়েছে।

একটি মাত্র URL ব্লক করুন

ম্যানিফেস্ট V2-তে একটি সাধারণ ব্যবহারের উদাহরণ ছিল ব্যাকগ্রাউন্ড স্ক্রিপ্টে onBeforeRequest ইভেন্ট ব্যবহার করে ওয়েব অনুরোধগুলিকে ব্লক করা।

ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড স্ক্রিপ্ট
chrome.webRequest.onBeforeRequest.addListener((e) => {
    return { cancel: true };
}, { urls: ["https://www.example.com/*"] }, ["blocking"]);

ম্যানিফেস্ট V3 এর জন্য, "block" অ্যাকশন টাইপ ব্যবহার করে একটি নতুন declarativeNetRequest নিয়ম তৈরি করুন। উদাহরণ নিয়মে "condition" অবজেক্টটি লক্ষ্য করুন। এর "urlFilter" webRequest শ্রোতার কাছে প্রেরিত urls বিকল্পটি প্রতিস্থাপন করে। একটি "resourceTypes" অ্যারে ব্লক করার জন্য রিসোর্সের বিভাগ নির্দিষ্ট করে। এই উদাহরণটি শুধুমাত্র প্রধান HTML পৃষ্ঠা ব্লক করে, তবে আপনি, উদাহরণস্বরূপ, শুধুমাত্র ফন্ট ব্লক করতে পারেন।

ম্যানিফেস্ট V3 নিয়ম ফাইল
[
  {
    "id" : 1,
    "priority": 1,
    "action" : { "type" : "block" },
    "condition" : {
      "urlFilter" : "||example.com",
      "resourceTypes" : ["main_frame"]
    }
  }
]

এটি কাজ করার জন্য, আপনাকে এক্সটেনশনের অনুমতিগুলি আপডেট করতে হবে। manifest.json"webRequestBlocking" অনুমতিটি "declarativeNetRequest" অনুমতি দিয়ে প্রতিস্থাপন করুন। লক্ষ্য করুন যে URLটি "permissions" ক্ষেত্র থেকে সরানো হয়েছে কারণ কন্টেন্ট ব্লক করার জন্য হোস্ট অনুমতির প্রয়োজন হয় না। উপরে দেখানো হয়েছে, নিয়ম ফাইলটি হোস্ট বা হোস্টগুলিকে নির্দিষ্ট করে যেখানে একটি ঘোষণামূলক নেট অনুরোধ প্রযোজ্য হয়।

যদি আপনি এটি চেষ্টা করতে চান, তাহলে নিচের কোডটি আমাদের samples repo তে পাওয়া যাবে

ম্যানিফেস্ট V2
  "permissions": [
    "webRequestBlocking",
    "https://*.example.com/*"
  ]
ম্যানিফেস্ট V3
  "permissions": [
    "declarativeNetRequest",
  ]

একাধিক URL পুনঃনির্দেশ করুন

ম্যানিফেস্ট V2-তে আরেকটি সাধারণ ব্যবহারের উদাহরণ ছিল ওয়েব অনুরোধগুলি পুনঃনির্দেশিত করার জন্য BeforeRequest ইভেন্ট ব্যবহার করা।

ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড স্ক্রিপ্ট
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" ফিল্ড রয়েছে যেখানে URL ফিল্টার করার পরিবর্তে ফেরত পাঠানো হবে।

ম্যানিফেস্ট V3 নিয়ম ফাইল
[
  {
    "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" অনুমতি দিয়ে প্রতিস্থাপন করুন। URL গুলি আবার manifest.json থেকে একটি নিয়ম ফাইলে সরানো হয়। লক্ষ্য করুন যে পুনঃনির্দেশনার জন্য হোস্ট অনুমতির পাশাপাশি "declarativeNetRequestWithHostAccess" অনুমতিরও প্রয়োজন।

যদি আপনি এটি চেষ্টা করতে চান, তাহলে নিচের কোডটি আমাদের samples repo তে পাওয়া যাবে

ম্যানিফেস্ট V2
  "permissions": [
    "webRequestBlocking",
    "https://developer.chrome.com/docs/extensions/*",
    "https://developer.chrome.com/docs/extensions/reference"
  ]
ম্যানিফেস্ট V3
  "permissions": [
    "declarativeNetRequestWithHostAccess"
  ],
  "host_permissions": [
    "https://developer.chrome.com/*"
  ]

কুকিজ ব্লক করুন

ম্যানিফেস্ট V2-তে, কুকিজ ব্লক করার জন্য ওয়েব রিকোয়েস্ট হেডার পাঠানোর আগে আটকানো এবং একটি নির্দিষ্ট হেডার অপসারণ করা প্রয়োজন।

ম্যানিফেস্ট 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" অ্যারে রয়েছে। এটি পূর্ববর্তী উদাহরণগুলির মতো একই মানগুলিকে সমর্থন করে।

যদি আপনি এটি চেষ্টা করতে চান, তাহলে নিচের কোডটি আমাদের samples repo তে পাওয়া যাবে

ম্যানিফেস্ট V3 manifest.json
[
  {
    "id": 1,
    "priority": 1,
    "action": {
      "type": "modifyHeaders",
      "requestHeaders": [
        { "header": "cookie", "operation": "remove" }
      ]
    },
    "condition": {
      "urlFilter": "|*?no-cookies=1",
      "resourceTypes": ["main_frame"]
    }
  }
]

এই পরিস্থিতিতে এক্সটেনশনের অনুমতিতেও পরিবর্তন প্রয়োজন। আগের মতোই, "webRequestBlocking" অনুমতিটি "declarativeNetRequest" অনুমতি দিয়ে প্রতিস্থাপন করুন।

ম্যানিফেস্ট V2
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "https://*/*",
    "http://*/*"
  ],
ম্যানিফেস্ট V3
  "permissions": [
    "declarativeNetRequest",
  ],
  "host_permissions": [
    ""
  ]