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

ऐसे अपडेट जो अन्य समस्याओं से संबंधित नहीं हैं

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

tab.exeuteScript() को scripting.executScript() से बदलें

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

आपको 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']
});

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

tab.insertCSS() और Tab.removeCSS() को scripting.insertCSS() और scripting.removeCSS() से बदल देता है.

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

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

scripting एपीआई पर मौजूद फ़ंक्शन, 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 में, ये कॉन्सेप्ट Action API के साथ जोड़े गए हैं. इसके लिए, आपको अपने manifest.json और एक्सटेंशन कोड में बदलाव करने होंगे. यह कोड, उस मेनिफ़ेस्ट कोड से अलग है जिसे आपने मेनिफ़ेस्ट V2 बैकग्राउंड स्क्रिप्ट में रखा होगा.

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

"ब्राउज़र_कार्रवाई" और "page_action" को "कार्रवाई" से बदलें

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

मेनिफ़ेस्ट V2
{
  ...
  "page_action": { ... },
  "browser_action": {
    "default_popup": "popup.html"
   }
  ...
}
मेनिफ़ेस्ट V3
{
  ...
  "action": {
    "default_popup": "popup.html"
  }

  ...
}

ब्राउज़र ऐक्शन और pageAction एपीआई को कार्रवाई एपीआई से बदलें

जहां आपके मेनिफ़ेस्ट V2 ने browserAction और pageAction एपीआई का इस्तेमाल किया हो, अब आपको action API का इस्तेमाल करना चाहिए.

मेनिफ़ेस्ट V2
chrome.browserAction.onClicked.addListener(tab => { ... });
chrome.pageAction.onClicked.addListener(tab => { ... });
मेनिफ़ेस्ट V3
chrome.action.onClicked.addListener(tab => { ... });

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

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

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

कॉलबैक को प्रॉमिस में बदलने के लिए, कॉलबैक को हटाएं और वापस किए गए प्रॉमिस को हैंडल करें. नीचे दिया गया उदाहरण, खास तौर पर 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() और सर्विस वर्कर के मैसेज इवेंट हैंडलर से बदलना चाहिए.

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

यहां दिए गए तरीकों और प्रॉपर्टी को मेनिफ़ेस्ट 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