ऐसे अपडेट जो अन्य समस्याओं से संबंधित नहीं हैं
यह तीन सेक्शन में से पहला सेक्शन है, जिसमें उस कोड के लिए ज़रूरी बदलावों के बारे में बताया गया है जो एक्सटेंशन सर्विस वर्कर का हिस्सा नहीं है. इस सेक्शन में उन ज़रूरी कोड बदलावों के बारे में बताया गया है जो दूसरी समस्याओं से नहीं जुड़े हैं. अगले दो सेक्शन में, वेब अनुरोधों को बदलना और सुरक्षा को बेहतर बनाना शामिल है.
tab.exeuteScript() को scripting.executScript() से बदलें
मेनिफ़ेस्ट V3 में, executeScript()
, tabs
एपीआई से scripting
एपीआई पर स्विच होता है. इसके लिए असल कोड बदलावों के साथ-साथ मेनिफ़ेस्ट फ़ाइल की अनुमतियों में भी बदलाव करना ज़रूरी है.
आपको 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'] });
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()
के लिए भी यही प्रक्रिया है.
chrome.tabs.insertCSS(tabId, injectDetails, () => { // callback code });
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"
फ़ील्ड की जानकारी के लिए रेफ़रंस देखें.
{ ... "page_action": { ... }, "browser_action": { "default_popup": "popup.html" } ... }
{ ... "action": { "default_popup": "popup.html" } ... }
ब्राउज़र ऐक्शन और pageAction एपीआई को कार्रवाई एपीआई से बदलें
जहां आपके मेनिफ़ेस्ट V2 ने browserAction
और pageAction
एपीआई का इस्तेमाल किया हो, अब आपको action
API का इस्तेमाल करना चाहिए.
chrome.browserAction.onClicked.addListener(tab => { ... }); chrome.pageAction.onClicked.addListener(tab => { ... });
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 |