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

ম্যানিফেস্ট V3-এ নেটওয়ার্ক অনুরোধগুলি পরিবর্তন করা হচ্ছে

ম্যানিফেস্ট V3 কীভাবে এক্সটেনশনগুলি নেটওয়ার্ক অনুরোধগুলির পরিবর্তন পরিচালনা করে তা পরিবর্তন করে। chrome.webRequest এর সাথে নেটওয়ার্ক অনুরোধগুলিকে বাধা দেওয়ার এবং রানটাইমে সেগুলিকে পরিবর্তন করার পরিবর্তে, আপনার এক্সটেনশন এমন নিয়মগুলি নির্দিষ্ট করে যা নির্দিষ্ট শর্তগুলির একটি সেট পূরণ করার সময় সম্পাদন করার জন্য ক্রিয়াগুলি বর্ণনা করে৷ ঘোষণামূলক নেট অনুরোধ 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 এর অধীনে 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" অনুমতি দিয়ে প্রতিস্থাপন করুন। লক্ষ্য করুন যে ইউআরএলটি "permissions" ক্ষেত্র থেকে সরানো হয়েছে কারণ সামগ্রী ব্লক করার জন্য হোস্টের অনুমতির প্রয়োজন হয় না৷ উপরে দেখানো হিসাবে, নিয়ম ফাইল হোস্ট বা হোস্ট নির্দিষ্ট করে যে একটি ঘোষণামূলক নেট অনুরোধ প্রযোজ্য।

আপনি যদি এটি চেষ্টা করতে চান তবে নীচের কোডটি আমাদের নমুনা রেপোতে উপলব্ধ

ম্যানিফেস্ট 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 ফিল্টার করার পরিবর্তে ফিরে আসার জন্য 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" অনুমতি প্রয়োজন।

আপনি যদি এটি চেষ্টা করতে চান তবে নীচের কোডটি আমাদের নমুনা রেপোতে উপলব্ধ

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

আপনি যদি এটি চেষ্টা করতে চান তবে নীচের কোডটি আমাদের নমুনা রেপোতে উপলব্ধ

ম্যানিফেস্ট 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": [
    ""
  ]