अपना कोड अपडेट करें

अन्य समस्याओं से जुड़े अपडेट

यह तीन सेक्शन में से पहला सेक्शन है. इसमें उस कोड के लिए ज़रूरी बदलावों के बारे में बताया गया है जो एक्सटेंशन सर्विस वर्कर का हिस्सा नहीं है. यह सेक्शन, कोड में ज़रूरी बदलावों के लिए है. ये बदलाव, अन्य समस्याओं से जुड़े नहीं हैं. अगले दो सेक्शन में, वेब के अनुरोधों को ब्लॉक करने की सुविधा को बदलने और सुरक्षा को बेहतर बनाने के बारे में बताया गया है.

tabs.executeScript() को scripting.executeScript() से बदलें

Manifest V3 में, executeScript() को tabs एपीआई से scripting एपीआई में ले जाया गया है. इसके लिए, कोड में बदलाव करने के साथ-साथ, मेनिफ़ेस्ट फ़ाइल में अनुमतियों में भी बदलाव करने होंगे.

executeScript() तरीके के लिए, आपको इनकी ज़रूरत होगी:

  • "scripting" की अनुमति.
  • होस्ट की अनुमतियां या "activeTab" की अनुमति.

scripting.executeScript() तरीका, tabs.executeScript() के काम करने के तरीके से मिलता-जुलता है. हालांकि, दोनों में कुछ अंतर हैं.

  • पुराने तरीके में सिर्फ़ एक फ़ाइल अपलोड की जा सकती थी. हालांकि, नए तरीके में फ़ाइलों का कलेक्शन अपलोड किया जा सकता है.
  • InjectDetails के बजाय, ScriptInjection ऑब्जेक्ट भी पास किया जा सकता है. दोनों में कई अंतर हैं. उदाहरण के लिए, tabId को अब मेथड आर्ग्युमेंट के बजाय, ScriptInjection.target के सदस्य के तौर पर पास किया जाता है.

इस उदाहरण में, ऐसा करने का तरीका बताया गया है.

Manifest V2
async function getCurrentTab() {/* ... */}
let tab = await getCurrentTab();

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

बैकग्राउंड स्क्रिप्ट फ़ाइल में.

Manifest V3
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 एपीआई से scripting एपीआई में ले जाया गया है. इसके लिए, कोड में बदलाव करने के साथ-साथ, मेनिफ़ेस्ट फ़ाइल में अनुमतियों में भी बदलाव करने होंगे:

  • "scripting" की अनुमति.
  • होस्ट की अनुमतियां या "activeTab" की अनुमति.

scripting API के फ़ंक्शन, tabs के फ़ंक्शन से मिलते-जुलते हैं. हालांकि, दोनों में कुछ अंतर हैं.

  • इन तरीकों को कॉल करते समय, InjectDetails के बजाय CSSInjection ऑब्जेक्ट पास करें.
  • tabId को अब मेथड आर्ग्युमेंट के बजाय, CSSInjection.target के सदस्य के तौर पर पास किया जाता है.

इस उदाहरण में, insertCSS() के लिए ऐसा करने का तरीका बताया गया है. removeCSS() के लिए भी यही तरीका है.

Manifest V2
browser.tabs.insertCSS(tabId, injectDetails, () => {
  // callback code
});

बैकग्राउंड स्क्रिप्ट फ़ाइल में.

Manifest V3
const insertPromise = await browser.scripting.insertCSS({
  files: ["style.css"],
  target: { tabId: tab.id }
});
// Remaining code. 

एक्सटेंशन सर्विस वर्कर में.

ब्राउज़र ऐक्शन और पेज ऐक्शन को ऐक्शन से बदलना

Manifest V2 में, ब्राउज़र ऐक्शन और पेज ऐक्शन अलग-अलग कॉन्सेप्ट थे. हालांकि, शुरुआत में दोनों की भूमिकाएं अलग-अलग थीं, लेकिन समय के साथ इनमें अंतर कम होता गया. Manifest V3 में, इन कॉन्सेप्ट को Action API में शामिल किया गया है. इसके लिए, आपको अपने manifest.json और एक्सटेंशन कोड में बदलाव करने होंगे. यह कोड, Manifest V2 के बैकग्राउंड स्क्रिप्ट में डाले गए कोड से अलग होता है.

Manifest V3 में कार्रवाइयां, ब्राउज़र की कार्रवाइयों से काफ़ी मिलती-जुलती हैं. हालांकि, action एपीआई, hide() और show() को pageAction की तरह उपलब्ध नहीं कराता. अगर आपको अब भी पेज ऐक्शन की ज़रूरत है, तो डिक्लेरेटिव कॉन्टेंट का इस्तेमाल करके उन्हें एम्युलेट किया जा सकता है. इसके अलावा, टैब आईडी के साथ enable() या disable() को कॉल किया जा सकता है.

"browser_action" और "page_action" को "action" से बदलें

manifest.json में, "browser_action" और "page_action" फ़ील्ड को "action" फ़ील्ड से बदलें. "action" फ़ील्ड की जानकारी के लिए, रेफ़रंस देखें.

Manifest V2
{
  ...
  "page_action": { ... },
  "browser_action": {
    "default_popup": "popup.html"
   }
  ...
}
Manifest V3
{
  ...
  "action": {
    "default_popup": "popup.html"
  }

  ...
}

browserAction और pageAction एपीआई को action एपीआई से बदलना

जहां Manifest V2 में browserAction और pageAction एपीआई का इस्तेमाल किया जाता था वहां अब आपको action एपीआई का इस्तेमाल करना चाहिए.

Manifest V2
browser.browserAction.onClicked.addListener(tab => { ... });
browser.pageAction.onClicked.addListener(tab => { ... });
Manifest V3
browser.action.onClicked.addListener(tab => { ... });

कॉलबैक को प्रॉमिस से बदलना

मेनिफ़ेस्ट V3 में, कई एक्सटेंशन एपीआई के तरीके प्रॉमिस दिखाते हैं. Promise, एसिंक्रोनस तरीके से मिली वैल्यू के लिए प्रॉक्सी या प्लेसहोल्डर होता है. अगर आपने कभी Promises का इस्तेमाल नहीं किया है, तो एमडीएन पर उनके बारे में पढ़ें. इस पेज पर बताया गया है कि Chrome एक्सटेंशन में इनका इस्तेमाल करने के लिए, आपको क्या जानकारी होनी चाहिए.

पुराने सिस्टम के साथ काम करने की सुविधा के लिए, प्रॉमिस की सुविधा जोड़ने के बाद भी कई तरीके कॉलबैक के साथ काम करते हैं. ध्यान रखें कि एक ही फ़ंक्शन कॉल में दोनों का इस्तेमाल नहीं किया जा सकता. अगर आपने कोई कॉलबैक पास किया है, तो फ़ंक्शन कोई प्रॉमिस नहीं दिखाएगा. अगर आपको प्रॉमिस चाहिए, तो कोई कॉलबैक पास न करें. एपीआई की कुछ सुविधाओं के लिए, कॉलबैक की ज़रूरत बनी रहेगी. जैसे, इवेंट लिसनर. कोई तरीका प्रॉमिस के साथ काम करता है या नहीं, यह देखने के लिए उसके एपीआई रेफ़रंस में "प्रॉमिस" लेबल देखें.

कॉलबैक को प्रॉमिस में बदलने के लिए, कॉलबैक को हटाएं और वापस मिले प्रॉमिस को मैनेज करें. यहां दिया गया उदाहरण, ज़रूरी नहीं होने वाली अनुमतियों के सैंपल से लिया गया है. खास तौर पर, newtab.js से. कॉलबैक वर्शन से पता चलता है कि कॉलबैक के साथ request() को सैंपल का कॉल कैसा दिखेगा. ध्यान दें कि प्रॉमिस वर्शन को async और await के साथ फिर से लिखा जा सकता है.

कॉलबैक
browser.permissions.request(newPerms, (granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});
Promise
const newPerms = { permissions: ['topSites'] };
browser.permissions.request(newPerms)
.then((granted) => {
  if (granted) {
    console.log('granted');
  } else {
    console.log('not granted');
  }
});

Manifest V2 के बैकग्राउंड कॉन्टेक्स्ट की उम्मीद करने वाले फ़ंक्शन बदलना

अन्य एक्सटेंशन कॉन्टेक्स्ट, मैसेज पासिंग का इस्तेमाल करके ही एक्सटेंशन सर्विस वर्कर के साथ इंटरैक्ट कर सकते हैं. इसलिए, आपको उन कॉल को बदलना होगा जो बैकग्राउंड कॉन्टेक्स्ट की उम्मीद करते हैं. खास तौर पर:

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

आपके एक्सटेंशन की स्क्रिप्ट को, सर्विस वर्कर और आपके एक्सटेंशन के अन्य हिस्सों के बीच कम्यूनिकेट करने के लिए, मैसेज पासिंग का इस्तेमाल करना चाहिए. फ़िलहाल, ऐसा करने के लिए sendMessage() का इस्तेमाल करें और अपने एक्सटेंशन सर्विस वर्कर में browser.runtime.onMessage को लागू करें. लंबे समय के लिए, आपको इन कॉल को postMessage() और सर्विस वर्कर के मैसेज इवेंट हैंडलर से बदलने का प्लान बनाना चाहिए.

काम न करने वाले एपीआई को बदलना

Manifest V3 में, यहां दिए गए तरीकों और प्रॉपर्टी में बदलाव करना ज़रूरी है.

Manifest 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