আপডেট যা অন্যান্য সমস্যার সাথে সম্পর্কিত নয়
এটি কোডের জন্য প্রয়োজনীয় পরিবর্তনগুলি বর্ণনা করে যা এক্সটেনশন পরিষেবা কর্মীর অংশ নয় তিনটি বিভাগের মধ্যে প্রথম। এই বিভাগটি প্রয়োজনীয় কোড পরিবর্তনের জন্য যা অন্যান্য সমস্যার সাথে সম্পর্কিত নয়। পরবর্তী দুটি বিভাগে ব্লকিং ওয়েব রিকোয়েস্ট প্রতিস্থাপন করা এবং নিরাপত্তার উন্নতি করা ।
tabs.executeScript() কে scripting.executeScript() দিয়ে প্রতিস্থাপন করুন
ম্যানিফেস্ট V3-এ, executeScript() tabs API থেকে scripting API-এ চলে যায়। এর জন্য প্রকৃত কোড পরিবর্তন ছাড়াও ম্যানিফেস্ট ফাইলের অনুমতিতে পরিবর্তন প্রয়োজন।
executeScript() পদ্ধতির জন্য আপনার প্রয়োজন:
-
"scripting"অনুমতি। - হয় হোস্ট অনুমতি বা
"activeTab"অনুমতি।
scripting.executeScript() পদ্ধতিটি tabs.executeScript() এর সাথে কীভাবে কাজ করে তার অনুরূপ। কয়েকটি পার্থক্য আছে।
- যদিও পুরানো পদ্ধতিটি শুধুমাত্র একটি ফাইল নিতে পারে, নতুন পদ্ধতিটি ফাইলগুলির একটি অ্যারে নিতে পারে।
- এছাড়াও আপনি
InjectDetailsএর পরিবর্তে একটিScriptInjectionঅবজেক্ট পাস করেন। উভয়ের মধ্যে একাধিক পার্থক্য রয়েছে। উদাহরণ স্বরূপ,tabIdএখন একটি মেথড আর্গুমেন্টের পরিবর্তেScriptInjection.targetএর সদস্য হিসেবে পাস করা হয়েছে।
উদাহরণ দেখায় কিভাবে এটি করতে হয়.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); chrome.tabs.executeScript( tab.id, { file: 'content-script.js' } );
একটি পটভূমি স্ক্রিপ্ট ফাইলে.
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() এর পদ্ধতি একই।
chrome.tabs.insertCSS(tabId, injectDetails, () => { // callback code });
একটি পটভূমি স্ক্রিপ্ট ফাইলে.
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" ক্ষেত্রের তথ্যের জন্য রেফারেন্সের সাথে পরামর্শ করুন।
{ ... "page_action": { ... }, "browser_action": { "default_popup": "popup.html" } ... }
{ ... "action": { "default_popup": "popup.html" } ... }
ব্রাউজার অ্যাকশন এবং পেজ অ্যাকশন এপিআইগুলিকে অ্যাকশন API দিয়ে প্রতিস্থাপন করুন
যেখানে আপনার ম্যানিফেস্ট V2 browserAction এবং pageAction এপিআই ব্যবহার করেছে, সেখানে আপনার এখন action এপিআই ব্যবহার করা উচিত।
chrome.browserAction.onClicked.addListener(tab => { ... }); chrome.pageAction.onClicked.addListener(tab => { ... });
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 |