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

আপডেট যা অন্যান্য সমস্যার সাথে সম্পর্কিত নয়

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

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

ম্যানিফেস্ট V3-এ, executeScript() tabs API থেকে scripting API-এ চলে যায়। এর জন্য প্রকৃত কোড পরিবর্তন ছাড়াও ম্যানিফেস্ট ফাইলের অনুমতিতে পরিবর্তন প্রয়োজন।

executeScript() পদ্ধতির জন্য আপনার প্রয়োজন:

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

scripting.executeScript() পদ্ধতিটি tabs.executeScript() এর সাথে কীভাবে কাজ করে তার অনুরূপ। কয়েকটি পার্থক্য আছে।

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

উদাহরণ দেখায় কিভাবে এটি করতে হয়.

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

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

একটি পটভূমি স্ক্রিপ্ট ফাইলে.

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

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

সম্প্রসারণ সেবা কর্মী মধ্যে.

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

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

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

scripting API-এর ফাংশনগুলি tabs ফাংশনগুলির অনুরূপ৷ কয়েকটি পার্থক্য আছে।

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

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

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

একটি পটভূমি স্ক্রিপ্ট ফাইলে.

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

সম্প্রসারণ সেবা কর্মী মধ্যে.

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

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

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

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

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

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

  ...
}

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

যেখানে আপনার ম্যানিফেস্ট V2 browserAction এবং pageAction এপিআই ব্যবহার করেছে, সেখানে আপনার এখন action এপিআই ব্যবহার করা উচিত।

ম্যানিফেস্ট V2
chrome.browserAction.onClicked.addListener(tab => { ... });
chrome.pageAction.onClicked.addListener(tab => { ... });
ম্যানিফেস্ট V3
chrome.action.onClicked.addListener(tab => { ... });

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

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

পশ্চাদগামী সামঞ্জস্যের জন্য, প্রতিশ্রুতি সমর্থন যোগ করার পরে অনেক পদ্ধতি কলব্যাক সমর্থন করে। সচেতন থাকুন যে আপনি একই ফাংশন কলে উভয়ই ব্যবহার করতে পারবেন না। যদি আপনি একটি কলব্যাক পাস করেন, ফাংশন একটি প্রতিশ্রুতি ফেরত দেবে না এবং যদি আপনি একটি প্রতিশ্রুতি ফেরত চান তাহলে একটি কলব্যাক পাস করবেন না। কিছু API বৈশিষ্ট্য, যেমন ইভেন্ট শ্রোতাদের, কলব্যাকের প্রয়োজন অব্যাহত থাকবে। একটি পদ্ধতি প্রতিশ্রুতি সমর্থন করে কিনা তা পরীক্ষা করতে, এর API রেফারেন্সে "প্রতিশ্রুতি" লেবেলটি সন্ধান করুন।

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

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

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

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

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

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

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

নীচে তালিকাভুক্ত পদ্ধতি এবং বৈশিষ্ট্যগুলি ম্যানিফেস্ট V3 এ পরিবর্তন করতে হবে।

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