আপনার কোড আপডেট করুন

অন্যান্য সমস্যার সাথে সম্পর্কহীন আপডেট

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

tabs.executeScript() কে scripting.executeScript() দিয়ে প্রতিস্থাপন করুন।

Manifest V3-তে, executeScript() tabs API থেকে scripting API-তে স্থানান্তরিত হয়েছে। এর জন্য প্রকৃত কোড পরিবর্তনের পাশাপাশি manifest ফাইলের পারমিশনেও পরিবর্তন আনতে হবে।

executeScript() মেথডের জন্য আপনার প্রয়োজন:

  • "scripting" অনুমতি।
  • হয় হোস্ট পারমিশন অথবা "activeTab" পারমিশন।

scripting.executeScript() মেথডটি tabs.executeScript() এর মতোই কাজ করে। তবে কয়েকটি পার্থক্য রয়েছে।

  • পুরানো পদ্ধতিতে কেবল একটি ফাইল নেওয়া গেলেও, নতুন পদ্ধতিতে একাধিক ফাইলের অ্যারে নেওয়া যায়।
  • আপনি InjectDetails এর পরিবর্তে একটি ScriptInjection অবজেক্টও পাস করতে পারেন। দুটির মধ্যে একাধিক পার্থক্য রয়েছে। উদাহরণস্বরূপ, tabId এখন মেথড আর্গুমেন্ট হিসেবে পাস না হয়ে, ScriptInjection.target এর মেম্বার হিসেবে পাস করা হয়।

উদাহরণটিতে দেখানো হয়েছে এটি কীভাবে করতে হয়।

ম্যানিফেস্ট ভি২
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

browser.tabs.executeScript(
  tab.id,
  {
    file: 'content-script.js'
  }
);

একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাইলে।

ম্যানিফেস্ট ভি৩
async function getCurrentTab()
let tab = await getCurrentTab();

browser.scripting.executeScript({
  target: {tabId: tab.id},
  files: ['content-script.js']
});

সম্প্রসারণ সেবা কর্মীর ক্ষেত্রে।

tabs.insertCSS() এবং tabs.removeCSS() কে scripting.insertCSS() এবং scripting.removeCSS() দিয়ে প্রতিস্থাপন করুন।

Manifest V3-তে, insertCSS() এবং removeCSS() ফাংশন tabs API থেকে scripting API- তে স্থানান্তরিত হয়েছে। এর জন্য কোড পরিবর্তনের পাশাপাশি manifest ফাইলের পারমিশনেও পরিবর্তন আনতে হবে:

  • "scripting" অনুমতি।
  • হয় হোস্ট পারমিশন অথবা "activeTab" পারমিশন।

scripting এপিআই-এর ফাংশনগুলো tabs ফাংশনগুলোর মতোই। তবে কিছু পার্থক্য রয়েছে।

  • এই মেথডগুলো কল করার সময়, InjectDetails এর পরিবর্তে একটি CSSInjection অবজেক্ট পাস করতে হয়।
  • tabId এখন মেথড আর্গুমেন্ট হিসেবে পাস করার পরিবর্তে CSSInjection.target এর মেম্বার হিসেবে পাস করা হয়।

উদাহরণটিতে দেখানো হয়েছে কিভাবে insertCSS() এর জন্য এটি করতে হয়। removeCSS() এর পদ্ধতিও একই।

ম্যানিফেস্ট ভি২
browser.tabs.insertCSS(tabId, injectDetails, () => {
  // callback code
});

একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাইলে।

ম্যানিফেস্ট ভি৩
const insertPromise = await browser.scripting.insertCSS({
  files: ["style.css"],
  target: { tabId: tab.id }
});
// Remaining code. 

সম্প্রসারণ সেবা কর্মীর ক্ষেত্রে।

ব্রাউজার অ্যাকশন এবং পেজ অ্যাকশনকে অ্যাকশন দিয়ে প্রতিস্থাপন করুন

ম্যানিফেস্ট V2-তে ব্রাউজার অ্যাকশন এবং পেজ অ্যাকশন দুটি আলাদা ধারণা ছিল। যদিও শুরুতে এদের ভূমিকা ভিন্ন ছিল, সময়ের সাথে সাথে এদের মধ্যকার পার্থক্য কমে আসে। ম্যানিফেস্ট V3-তে এই ধারণাগুলোকে অ্যাকশন এপিআই (Action API)-এর অধীনে একীভূত করা হয়েছে। এর জন্য আপনার manifest.json এবং এক্সটেনশন কোডে এমন কিছু পরিবর্তন আনতে হবে, যা আপনার ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড স্ক্রিপ্টে থাকা কোড থেকে ভিন্ন।

Manifest V3-এর অ্যাকশনগুলো ব্রাউজার অ্যাকশনের সাথে সবচেয়ে বেশি সাদৃশ্যপূর্ণ; তবে, pageAction মতো এর action API-তে hide() এবং show() ফাংশন নেই। আপনার যদি এখনও পেজ অ্যাকশনের প্রয়োজন হয়, তবে আপনি ডিক্লারেটিভ কন্টেন্ট ব্যবহার করে সেগুলোর অনুকরণ করতে পারেন অথবা একটি ট্যাব আইডি দিয়ে enable() বা disable() কল করতে পারেন।

'browser_action' এবং 'page_action'-কে 'action' দিয়ে প্রতিস্থাপন করুন।

manifest.json ফাইলে "browser_action" এবং "page_action" ফিল্ড দুটিকে "action" ফিল্ড দিয়ে প্রতিস্থাপন করুন। "action" ফিল্ড সম্পর্কে তথ্যের জন্য রেফারেন্স দেখুন।

ম্যানিফেস্ট ভি২
{
  ...
  "page_action": { ... },
  "browser_action": {
    "default_popup": "popup.html"
   }
  ...
}
ম্যানিফেস্ট ভি৩
{
  ...
  "action": {
    "default_popup": "popup.html"
  }

  ...
}

browserAction এবং pageAction API-গুলোকে action API দিয়ে প্রতিস্থাপন করুন।

আপনার Manifest V2-তে যেখানে browserAction এবং pageAction API ব্যবহৃত হয়েছিল, সেখানে এখন action API ব্যবহার করা উচিত।

ম্যানিফেস্ট ভি২
browser.browserAction.onClicked.addListener(tab => { ... });
browser.pageAction.onClicked.addListener(tab => { ... });
ম্যানিফেস্ট ভি৩
browser.action.onClicked.addListener(tab => { ... });

কলব্যাকগুলিকে প্রমিস দিয়ে প্রতিস্থাপন করুন

Manifest V3-তে, অনেক এক্সটেনশন API মেথড প্রমিজ রিটার্ন করে। একটি প্রমিজ হলো একটি অ্যাসিঙ্ক্রোনাস মেথড দ্বারা রিটার্ন করা মানের জন্য একটি প্রক্সি বা প্লেসহোল্ডার। আপনি যদি আগে কখনো প্রমিজ ব্যবহার না করে থাকেন, তবে MDN-এ এ সম্পর্কে পড়তে পারেন। একটি ক্রোম এক্সটেনশনে এগুলো ব্যবহার করার জন্য আপনার যা যা জানা প্রয়োজন, এই পৃষ্ঠাটিতে তা বর্ণনা করা হয়েছে।

পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রাখার জন্য, প্রমিস সাপোর্ট যুক্ত হওয়ার পরেও অনেক মেথড কলব্যাক সাপোর্ট করে। মনে রাখবেন যে, আপনি একই ফাংশন কলে উভয়ই ব্যবহার করতে পারবেন না। যদি আপনি একটি কলব্যাক পাস করেন, তাহলে ফাংশনটি প্রমিস রিটার্ন করবে না এবং যদি আপনি প্রমিস রিটার্ন পেতে চান, তাহলে কোনো কলব্যাক পাস করবেন না। কিছু এপিআই ফিচার, যেমন ইভেন্ট লিসেনার, এর জন্য কলব্যাকের প্রয়োজন হবে। কোনো মেথড প্রমিস সাপোর্ট করে কিনা তা পরীক্ষা করতে, এর এপিআই রেফারেন্সে "Promise" লেবেলটি খুঁজুন।

কলব্যাক থেকে প্রমিজে রূপান্তর করতে, কলব্যাকটি সরিয়ে দিন এবং ফেরত আসা প্রমিজটি হ্যান্ডেল করুন। নিচের উদাহরণটি ঐচ্ছিক পারমিশন স্যাম্পল , বিশেষ করে newtab.js থেকে নেওয়া হয়েছে। কলব্যাক সংস্করণটি দেখায় যে স্যাম্পলটির request() কলটি একটি কলব্যাক সহ কেমন দেখাবে। উল্লেখ্য যে, প্রমিজ সংস্করণটি async এবং await ব্যবহার করে নতুন করে লেখা যেতে পারে।

কলব্যাক
browser.permissions.request(newPerms, (granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});
প্রতিশ্রুতি
const newPerms = { permissions: ['topSites'] };
browser.permissions.request(newPerms)
.then((granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});

যে ফাংশনগুলো ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড কনটেক্সট আশা করে, সেগুলোকে প্রতিস্থাপন করুন।

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

  • browser.runtime.getBackgroundPage()
  • browser.extension.getBackgroundPage()
  • browser.extension.getExtensionTabs()

আপনার এক্সটেনশন স্ক্রিপ্টগুলোতে একটি সার্ভিস ওয়ার্কার এবং আপনার এক্সটেনশনের অন্যান্য অংশের মধ্যে যোগাযোগের জন্য মেসেজ পাসিং ব্যবহার করা উচিত। বর্তমানে, আপনার এক্সটেনশন সার্ভিস ওয়ার্কারে sendMessage() এবং browser.runtime.onMessage ইমপ্লিমেন্ট করার মাধ্যমে এটি করা যেতে পারে। দীর্ঘমেয়াদে, আপনার এই কলগুলোকে postMessage() এবং একটি সার্ভিস ওয়ার্কারের মেসেজ ইভেন্ট হ্যান্ডলার দিয়ে প্রতিস্থাপন করার পরিকল্পনা করা উচিত।

অসমর্থিত API গুলি প্রতিস্থাপন করুন

Manifest V3-তে নিচে তালিকাভুক্ত মেথড ও প্রপার্টিগুলো পরিবর্তন করতে হবে।

ম্যানিফেস্ট V2 পদ্ধতি বা বৈশিষ্ট্য প্রতিস্থাপন করুন
browser.extension.connect() browser.runtime.connect()
browser.extension.connectNative() browser.runtime.connectNative()
browser.extension.getExtensionTabs() browser.extension.getViews()
browser.extension.getURL() browser.runtime.getURL()
browser.extension.lastError যেসব মেথড প্রমিস রিটার্ন করে, সেখানে promise.catch() ব্যবহার করুন।
browser.extension.onConnect browser.runtime.onConnect
browser.extension.onConnectExternal browser.runtime.onConnectExternal
browser.extension.onMessage browser.runtime.onMessage
browser.extension.onRequest browser.runtime.onMessage
browser.extension.onRequestExternal browser.runtime.onMessageExternal
browser.extension.sendMessage() browser.runtime.sendMessage()
browser.extension.sendNativeMessage() browser.runtime.sendNativeMessage()
browser.extension.sendRequest() browser.runtime.sendMessage()
browser.runtime.onSuspend (ব্যাকগ্রাউন্ড স্ক্রিপ্ট) এক্সটেনশন সার্ভিস ওয়ার্কারদের ক্ষেত্রে এটি সমর্থিত নয়। এর পরিবর্তে beforeunload ডকুমেন্ট ইভেন্টটি ব্যবহার করুন।
browser.tabs.getAllInWindow() browser.tabs.query()
browser.tabs.getSelected() browser.tabs.query()
browser.tabs.onActiveChanged browser.tabs.onActivated
browser.tabs.onHighlightChanged browser.tabs.onHighlighted
browser.tabs.onSelectionChanged browser.tabs.onActivated
browser.tabs.sendRequest() browser.runtime.sendMessage()
browser.tabs.Tab.selected browser.tabs.Tab.highlighted
,

অন্যান্য সমস্যার সাথে সম্পর্কহীন আপডেট

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

tabs.executeScript() কে scripting.executeScript() দিয়ে প্রতিস্থাপন করুন।

Manifest V3-তে, executeScript() tabs API থেকে scripting API-তে স্থানান্তরিত হয়েছে। এর জন্য প্রকৃত কোড পরিবর্তনের পাশাপাশি manifest ফাইলের পারমিশনেও পরিবর্তন আনতে হবে।

executeScript() মেথডের জন্য আপনার প্রয়োজন:

  • "scripting" অনুমতি।
  • হয় হোস্ট পারমিশন অথবা "activeTab" পারমিশন।

scripting.executeScript() মেথডটি tabs.executeScript() এর মতোই কাজ করে। তবে কয়েকটি পার্থক্য রয়েছে।

  • পুরানো পদ্ধতিতে কেবল একটি ফাইল নেওয়া গেলেও, নতুন পদ্ধতিতে একাধিক ফাইলের অ্যারে নেওয়া যায়।
  • আপনি InjectDetails এর পরিবর্তে একটি ScriptInjection অবজেক্টও পাস করতে পারেন। দুটির মধ্যে একাধিক পার্থক্য রয়েছে। উদাহরণস্বরূপ, tabId এখন মেথড আর্গুমেন্ট হিসেবে পাস না হয়ে, ScriptInjection.target এর মেম্বার হিসেবে পাস করা হয়।

উদাহরণটিতে দেখানো হয়েছে এটি কীভাবে করতে হয়।

ম্যানিফেস্ট ভি২
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

browser.tabs.executeScript(
  tab.id,
  {
    file: 'content-script.js'
  }
);

একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাইলে।

ম্যানিফেস্ট ভি৩
async function getCurrentTab()
let tab = await getCurrentTab();

browser.scripting.executeScript({
  target: {tabId: tab.id},
  files: ['content-script.js']
});

সম্প্রসারণ সেবা কর্মীর ক্ষেত্রে।

tabs.insertCSS() এবং tabs.removeCSS() কে scripting.insertCSS() এবং scripting.removeCSS() দিয়ে প্রতিস্থাপন করুন।

Manifest V3-তে, insertCSS() এবং removeCSS() ফাংশন tabs API থেকে scripting API- তে স্থানান্তরিত হয়েছে। এর জন্য কোড পরিবর্তনের পাশাপাশি manifest ফাইলের পারমিশনেও পরিবর্তন আনতে হবে:

  • "scripting" অনুমতি।
  • হয় হোস্ট পারমিশন অথবা "activeTab" পারমিশন।

scripting এপিআই-এর ফাংশনগুলো tabs ফাংশনগুলোর মতোই। তবে কিছু পার্থক্য রয়েছে।

  • এই মেথডগুলো কল করার সময়, InjectDetails এর পরিবর্তে একটি CSSInjection অবজেক্ট পাস করতে হয়।
  • tabId এখন মেথড আর্গুমেন্ট হিসেবে পাস করার পরিবর্তে CSSInjection.target এর মেম্বার হিসেবে পাস করা হয়।

উদাহরণটিতে দেখানো হয়েছে কিভাবে insertCSS() এর জন্য এটি করতে হয়। removeCSS() এর পদ্ধতিও একই।

ম্যানিফেস্ট ভি২
browser.tabs.insertCSS(tabId, injectDetails, () => {
  // callback code
});

একটি ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাইলে।

ম্যানিফেস্ট ভি৩
const insertPromise = await browser.scripting.insertCSS({
  files: ["style.css"],
  target: { tabId: tab.id }
});
// Remaining code. 

সম্প্রসারণ সেবা কর্মীর ক্ষেত্রে।

ব্রাউজার অ্যাকশন এবং পেজ অ্যাকশনকে অ্যাকশন দিয়ে প্রতিস্থাপন করুন

ম্যানিফেস্ট V2-তে ব্রাউজার অ্যাকশন এবং পেজ অ্যাকশন দুটি আলাদা ধারণা ছিল। যদিও শুরুতে এদের ভূমিকা ভিন্ন ছিল, সময়ের সাথে সাথে এদের মধ্যকার পার্থক্য কমে আসে। ম্যানিফেস্ট V3-তে এই ধারণাগুলোকে অ্যাকশন এপিআই (Action API)-এর অধীনে একীভূত করা হয়েছে। এর জন্য আপনার manifest.json এবং এক্সটেনশন কোডে এমন কিছু পরিবর্তন আনতে হবে, যা আপনার ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড স্ক্রিপ্টে থাকা কোড থেকে ভিন্ন।

Manifest V3-এর অ্যাকশনগুলো ব্রাউজার অ্যাকশনের সাথে সবচেয়ে বেশি সাদৃশ্যপূর্ণ; তবে, pageAction মতো এর action API-তে hide() এবং show() ফাংশন নেই। আপনার যদি এখনও পেজ অ্যাকশনের প্রয়োজন হয়, তবে আপনি ডিক্লারেটিভ কন্টেন্ট ব্যবহার করে সেগুলোর অনুকরণ করতে পারেন অথবা একটি ট্যাব আইডি দিয়ে enable() বা disable() কল করতে পারেন।

'browser_action' এবং 'page_action'-কে 'action' দিয়ে প্রতিস্থাপন করুন।

manifest.json ফাইলে "browser_action" এবং "page_action" ফিল্ড দুটিকে "action" ফিল্ড দিয়ে প্রতিস্থাপন করুন। "action" ফিল্ড সম্পর্কে তথ্যের জন্য রেফারেন্স দেখুন।

ম্যানিফেস্ট ভি২
{
  ...
  "page_action": { ... },
  "browser_action": {
    "default_popup": "popup.html"
   }
  ...
}
ম্যানিফেস্ট ভি৩
{
  ...
  "action": {
    "default_popup": "popup.html"
  }

  ...
}

browserAction এবং pageAction API-গুলোকে action API দিয়ে প্রতিস্থাপন করুন।

আপনার Manifest V2-তে যেখানে browserAction এবং pageAction API ব্যবহৃত হয়েছিল, সেখানে এখন action API ব্যবহার করা উচিত।

ম্যানিফেস্ট ভি২
browser.browserAction.onClicked.addListener(tab => { ... });
browser.pageAction.onClicked.addListener(tab => { ... });
ম্যানিফেস্ট ভি৩
browser.action.onClicked.addListener(tab => { ... });

কলব্যাকগুলিকে প্রমিস দিয়ে প্রতিস্থাপন করুন

Manifest V3-তে, অনেক এক্সটেনশন API মেথড প্রমিজ রিটার্ন করে। একটি প্রমিজ হলো একটি অ্যাসিঙ্ক্রোনাস মেথড দ্বারা রিটার্ন করা মানের জন্য একটি প্রক্সি বা প্লেসহোল্ডার। আপনি যদি আগে কখনো প্রমিজ ব্যবহার না করে থাকেন, তবে MDN-এ এ সম্পর্কে পড়তে পারেন। একটি ক্রোম এক্সটেনশনে এগুলো ব্যবহার করার জন্য আপনার যা যা জানা প্রয়োজন, এই পৃষ্ঠাটিতে তা বর্ণনা করা হয়েছে।

পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্য রাখার জন্য, প্রমিস সাপোর্ট যুক্ত হওয়ার পরেও অনেক মেথড কলব্যাক সাপোর্ট করে। মনে রাখবেন যে, আপনি একই ফাংশন কলে উভয়ই ব্যবহার করতে পারবেন না। যদি আপনি একটি কলব্যাক পাস করেন, তাহলে ফাংশনটি প্রমিস রিটার্ন করবে না এবং যদি আপনি প্রমিস রিটার্ন পেতে চান, তাহলে কোনো কলব্যাক পাস করবেন না। কিছু এপিআই ফিচার, যেমন ইভেন্ট লিসেনার, এর জন্য কলব্যাকের প্রয়োজন হবে। কোনো মেথড প্রমিস সাপোর্ট করে কিনা তা পরীক্ষা করতে, এর এপিআই রেফারেন্সে "Promise" লেবেলটি খুঁজুন।

কলব্যাক থেকে প্রমিজে রূপান্তর করতে, কলব্যাকটি সরিয়ে দিন এবং ফেরত আসা প্রমিজটি হ্যান্ডেল করুন। নিচের উদাহরণটি ঐচ্ছিক পারমিশন স্যাম্পল , বিশেষ করে newtab.js থেকে নেওয়া হয়েছে। কলব্যাক সংস্করণটি দেখায় যে স্যাম্পলটির request() কলটি একটি কলব্যাক সহ কেমন দেখাবে। উল্লেখ্য যে, প্রমিজ সংস্করণটি async এবং await ব্যবহার করে নতুন করে লেখা যেতে পারে।

কলব্যাক
browser.permissions.request(newPerms, (granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});
প্রতিশ্রুতি
const newPerms = { permissions: ['topSites'] };
browser.permissions.request(newPerms)
.then((granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});

যে ফাংশনগুলো ম্যানিফেস্ট V2 ব্যাকগ্রাউন্ড কনটেক্সট আশা করে, সেগুলোকে প্রতিস্থাপন করুন।

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

  • browser.runtime.getBackgroundPage()
  • browser.extension.getBackgroundPage()
  • browser.extension.getExtensionTabs()

আপনার এক্সটেনশন স্ক্রিপ্টগুলোতে একটি সার্ভিস ওয়ার্কার এবং আপনার এক্সটেনশনের অন্যান্য অংশের মধ্যে যোগাযোগের জন্য মেসেজ পাসিং ব্যবহার করা উচিত। বর্তমানে, আপনার এক্সটেনশন সার্ভিস ওয়ার্কারে sendMessage() এবং browser.runtime.onMessage ইমপ্লিমেন্ট করার মাধ্যমে এটি করা যেতে পারে। দীর্ঘমেয়াদে, আপনার এই কলগুলোকে postMessage() এবং একটি সার্ভিস ওয়ার্কারের মেসেজ ইভেন্ট হ্যান্ডলার দিয়ে প্রতিস্থাপন করার পরিকল্পনা করা উচিত।

অসমর্থিত API গুলি প্রতিস্থাপন করুন

Manifest V3-তে নিচে তালিকাভুক্ত মেথড ও প্রপার্টিগুলো পরিবর্তন করতে হবে।

ম্যানিফেস্ট V2 পদ্ধতি বা বৈশিষ্ট্য প্রতিস্থাপন করুন
browser.extension.connect() browser.runtime.connect()
browser.extension.connectNative() browser.runtime.connectNative()
browser.extension.getExtensionTabs() browser.extension.getViews()
browser.extension.getURL() browser.runtime.getURL()
browser.extension.lastError যেসব মেথড প্রমিস রিটার্ন করে, সেখানে promise.catch() ব্যবহার করুন।
browser.extension.onConnect browser.runtime.onConnect
browser.extension.onConnectExternal browser.runtime.onConnectExternal
browser.extension.onMessage browser.runtime.onMessage
browser.extension.onRequest browser.runtime.onMessage
browser.extension.onRequestExternal browser.runtime.onMessageExternal
browser.extension.sendMessage() browser.runtime.sendMessage()
browser.extension.sendNativeMessage() browser.runtime.sendNativeMessage()
browser.extension.sendRequest() browser.runtime.sendMessage()
browser.runtime.onSuspend (ব্যাকগ্রাউন্ড স্ক্রিপ্ট) এক্সটেনশন সার্ভিস ওয়ার্কারদের ক্ষেত্রে এটি সমর্থিত নয়। এর পরিবর্তে beforeunload ডকুমেন্ট ইভেন্টটি ব্যবহার করুন।
browser.tabs.getAllInWindow() browser.tabs.query()
browser.tabs.getSelected() browser.tabs.query()
browser.tabs.onActiveChanged browser.tabs.onActivated
browser.tabs.onHighlightChanged browser.tabs.onHighlighted
browser.tabs.onSelectionChanged browser.tabs.onActivated
browser.tabs.sendRequest() browser.runtime.sendMessage()
browser.tabs.Tab.selected browser.tabs.Tab.highlighted