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

ऐसे अपडेट जो अन्य समस्याओं से जुड़े नहीं हैं

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

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

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

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

"browser_action" बदलें और "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"
  }

  ...
}

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

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

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

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

मेनिफ़ेस्ट V3 में, एक्सटेंशन एपीआई के कई तरीके, प्रॉमिस दिखाते हैं. Promise, किसी एसिंक्रोनस तरीके से लौटाई गई वैल्यू का प्रॉक्सी या प्लेसहोल्डर होता है. अगर आपने कभी प्रॉमिस का इस्तेमाल नहीं किया है, तो एमडीएन पर उनके बारे में पढ़ा जा सकता है. इस पेज पर बताया गया है कि 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