ক্রোম ১৪৮ থেকে, বিদ্যমান chrome নেমস্পেসের পাশাপাশি browser নেমস্পেসের অধীনেও সমস্ত ক্রোম এক্সটেনশন এপিআই উপলব্ধ। উদাহরণস্বরূপ, browser.tabs.create({}) এবং chrome.tabs.create({}) সমতুল্য।
যেখানে যেখানে এক্সটেনশন এপিআই কল করা যায়, যেমন কন্টেন্ট স্ক্রিপ্ট, সার্ভিস ওয়ার্কার এবং অফস্ক্রিন ডকুমেন্ট, সেখানেই এই নেমস্পেসটি উপলব্ধ। এটি chrome মতোই একই এপিআই অবজেক্টগুলোকে নির্দেশ করে, তাই chrome.tabs === browser.tabs ।
browser নেমস্পেসটি ওয়েবএক্সটেনশনস কমিউনিটি গ্রুপ (WECG)- এর কাজের ফলস্বরূপ তৈরি হয়েছে। এটি W3C-এর একটি কমিউনিটি গ্রুপ, যেখানে ব্রাউজার বিক্রেতারা অভিন্ন এক্সটেনশন স্ট্যান্ডার্ড নিয়ে কাজ করে। chrome নেমস্পেসটি বিলুপ্ত হচ্ছে না; উভয় নেমস্পেসই কাজ করা চালিয়ে যাবে।
ব্রাউজার নেমস্পেস গ্রহণ করবেন কিনা তা স্থির করুন।
আপনি যদি webextension-polyfill ব্যবহার করেন, তাহলে অন্য কিছু পরিবর্তন করার আগে সরাসরি ‘পলিফিল ব্যবহারকারীদের জন্য একটি দ্রষ্টব্য’ অংশে চলে যান — আপনার জন্য উত্তরটি ভিন্ন হবে।
আপনি যদি একটি নতুন এক্সটেনশন তৈরি করেন, তাহলে minimum_chrome_version "148" -এ সেট করুন এবং browser নিঃশর্তভাবে ব্যবহার করুন; আপনি এখানেই পড়া বন্ধ করতে পারেন। এই বিভাগের বাকি অংশটি বিদ্যমান এক্সটেনশনগুলোর জন্য, যারা কীভাবে এটি গ্রহণ করবে তা সিদ্ধান্ত নিচ্ছে।
আপনার ব্যবহারকারীরা ক্রোমের কোন সংস্করণ ব্যবহার করছেন তা যাচাই করুন
আপনার যদি আগে থেকেই কোনো এক্সটেনশন থাকে, তবে সংস্করণ পরিবর্তন করার আগে আপনার ব্যবহারকারীরা ক্রোমের কোন সংস্করণ ব্যবহার করছেন তা যাচাই করে নিন। ক্রোম স্বয়ংক্রিয়ভাবে আপডেট হয়, কিন্তু কিছু ব্যবহারকারী আপডেট বন্ধ করে রাখেন এবং অন্যরা পুরোনো ডিভাইস ব্যবহার করেন যেগুলোতে সর্বশেষ সংস্করণটি চালানো যায় না। আপনার নিজের অ্যানালিটিক্স ডেটা দিয়ে বিষয়টি নিশ্চিত করুন। আপনার যদি এখনও অ্যানালিটিক্স সেট আপ করা না থাকে, তবে শুরু করার জন্য ‘গুগল অ্যানালিটিক্স ৪ দিয়ে আপনার এক্সটেনশনের পারফরম্যান্স নিরীক্ষণ করুন’ দেখুন।
সেখান থেকে, একটি পথ বেছে নিন:
- আপনার ব্যবহারকারীরা যদি ক্রোম ১৪৮ বা তার পরবর্তী সংস্করণ ব্যবহার করেন , তবে নিঃশর্তভাবে তা গ্রহণ করুন ।
- আপনার ব্যবহারকারীদের একটি উল্লেখযোগ্য অংশ যদি ক্রোম ১৪৭ বা তার পূর্ববর্তী সংস্করণ ব্যবহার করেন , তাহলে রানটাইম গার্ড ব্যবহার করুন ।
নিঃশর্তভাবে গ্রহণ করুন
আপনার ম্যানিফেস্টে minimum_chrome_version সেট করুন এবং শর্তহীনভাবে browser ব্যবহার করুন - কোনো রানটাইম গার্ডের প্রয়োজন নেই:
{
"minimum_chrome_version": "148"
}
minimum_chrome_version বাড়ানোর সময় একটি পর্যায়ক্রমিক রোলআউট ব্যবহার করুন। যদি কোনো সমস্যা হয়, আপনি Chrome Web Store থেকে আপনার এক্সটেনশনটি রোল ব্যাক করতে পারবেন।
রানটাইম গার্ড ব্যবহার করুন
আপনার এক্সটেনশনের স্টার্টআপ কোডের শুরুতে, অন্য কোথাও browser উল্লেখ করার আগে, নিম্নলিখিত কোডটুকু যোগ করুন:
if (!globalThis.browser) {
globalThis.browser = chrome;
// Consider firing an analytics event here to measure how often
// your users hit this fallback path.
}
এর ফলে আগের সংস্করণগুলোতে browser chrome একটি বিকল্প নাম (alias) হয়ে যায়, তাই আপনার কোডের বাকি অংশ নিঃশর্তভাবে browser ব্যবহার করতে পারে।
পলিফিল ব্যবহারকারীদের জন্য একটি নোট
আপনার এক্সটেনশন যদি webextension-polyfill ব্যবহার করে, তাহলে Chrome 148 এবং তার পরবর্তী সংস্করণগুলিতে এটি কোনো কাজ করে না। browser আগে থেকে সংজ্ঞায়িত থাকলে পলিফিলটি র্যাপিং এড়িয়ে যেত, কারণ এটি ধরে নিত যে হোস্ট ব্রাউজারটি ইতিমধ্যেই API সরবরাহ করেছে।
এই কারণে ক্রোম ১৩৬-এ নেমস্পেসটি অন্তর্ভুক্ত করার একটি পূর্ববর্তী প্রচেষ্টা বাতিল করা হয়েছিল: browser নতুনভাবে সংজ্ঞায়িত হওয়ায় পলিফিলটি র্যাপ করা বন্ধ করে দিয়েছিল, কিন্তু ক্রোমের browser.runtime.onMessage তখনও প্রমিস-রিটার্নিং লিসেনার সমর্থন করত না, যা পলিফিলটি সরবরাহ করে আসছিল। এর ফলে, সেই প্যাটার্নের উপর নির্ভরশীল এক্সটেনশনগুলো অকার্যকর হয়ে পড়ে। এই ঘাটতি এড়ানোর জন্য ক্রোম ১৪৮-এ নেমস্পেস এবং নেটিভ প্রমিস-রিটার্নিং onMessage লিসেনার একসাথে অন্তর্ভুক্ত করা হয়েছে।
আপনার ব্যবহারকারীরা ক্রোম ১৪৮-এ স্থানান্তরিত হয়ে গেলে আপনি পলিফিল নির্ভরতাটি সরিয়ে ফেলতে পারেন।
অন্যান্য বৈশিষ্ট্য
runtime.sendMessage-এ অ্যাসিঙ্ক প্রতিক্রিয়া
ক্রোম ১৪৮-এ, runtime.onMessage লিসেনারগুলো একটি অ্যাসিঙ্ক রেসপন্স পাঠানোর জন্য সরাসরি একটি Promise রিটার্ন করতে পারে। আপনি এটিকে chrome.* বা browser.* ব্যবহার করে কল করুন না কেন, এটি কাজ করে।
পূর্বে অ্যাসিঙ্ক্রোনাসভাবে সাড়া দেওয়ার একমাত্র উপায় ছিল লিসেনার থেকে আক্ষরিকভাবে ' true রিটার্ন করা এবং পরে sendResponse কল করা:
// Old pattern - requires returning true to keep the channel open
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
fetch('https://example.com')
.then(response => sendResponse({ statusCode: response.status }));
return true; // keeps the message channel open for the async response
});
আপনি এখন সরাসরি একটি Promise রিটার্ন করতে পারেন (অথবা একটি async ফাংশন ব্যবহার করতে পারেন):
// New pattern - return a promise or use async/await
browser.runtime.onMessage.addListener(async (message, sender) => {
const response = await fetch('https://example.com');
return { statusCode: response.status };
});
return true প্যাটার্নটি কাজ করতে থাকবে, তাই বিদ্যমান কোড পরিবর্তন করার প্রয়োজন নেই।