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

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

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

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() और tabs.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"
  }

  ...
}

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

जहां आपके मेनिफ़ेस्ट 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