ब्यौरा
chrome.permissions
एपीआई का इस्तेमाल करके, ऐसी अनुमतियों के लिए अनुरोध करें जिन्हें ऐप्लिकेशन इंस्टॉल करने के समय नहीं, बल्कि ऐप्लिकेशन के इस्तेमाल के दौरान मांगा जाता है. इससे उपयोगकर्ता यह समझ पाते हैं कि अनुमतियों की ज़रूरत क्यों है और वे सिर्फ़ ज़रूरी अनुमतियां देते हैं.
कॉन्सेप्ट और इस्तेमाल
अनुमति से जुड़ी चेतावनियां, एपीआई से मिली अनुमतियों के बारे में बताने के लिए होती हैं. हालांकि, हो सकता है कि इनमें से कुछ चेतावनियां साफ़ तौर पर न दिखें. Permissions API की मदद से, डेवलपर अनुमति से जुड़ी चेतावनियों के बारे में बता सकते हैं. साथ ही, धीरे-धीरे नई सुविधाएं लॉन्च कर सकते हैं. इससे उपयोगकर्ताओं को एक्सटेंशन के बारे में बिना किसी जोखिम के जानकारी मिलती है. इस तरह, उपयोगकर्ता यह तय कर सकते हैं कि उन्हें कितना ऐक्सेस देना है और कौनसी सुविधाएं चालू करनी हैं.
उदाहरण के लिए, ज़रूरी नहीं है कि अनुमतियों वाले एक्सटेंशन का मुख्य फ़ंक्शन, नए टैब पेज को बदल दे. इस सुविधा में, उपयोगकर्ता के दिन का लक्ष्य दिखाया गया है. इस सुविधा के लिए, सिर्फ़ स्टोरेज की अनुमति की ज़रूरत होती है. इसमें चेतावनी शामिल नहीं होती. एक्सटेंशन में एक और सुविधा है. उपयोगकर्ता इस बटन पर क्लिक करके, इस सुविधा को चालू कर सकते हैं:
उपयोगकर्ता की सबसे ज़्यादा देखी गई साइटों को दिखाने के लिए, topSites की अनुमति लेनी होगी. इस अनुमति के लिए, यह चेतावनी दी गई है.
वैकल्पिक अनुमतियां लागू करना
पहला चरण: यह तय करना कि कौनसी अनुमतियां ज़रूरी हैं और कौनसी वैकल्पिक हैं
एक्सटेंशन में, ज़रूरी और वैकल्पिक, दोनों तरह की अनुमतियों का एलान किया जा सकता है. आम तौर पर, आपको:
- जब आपके एक्सटेंशन के बुनियादी फ़ंक्शन के लिए ज़रूरी अनुमतियां हों, तब ही उनका इस्तेमाल करें.
- अपने एक्सटेंशन में वैकल्पिक सुविधाओं के लिए, वैकल्पिक अनुमतियों का इस्तेमाल करें.
ज़रूरी अनुमतियों के फ़ायदे:
- कम प्रॉम्प्ट: कोई एक्सटेंशन, सभी अनुमतियां स्वीकार करने के लिए उपयोगकर्ता से एक बार अनुरोध कर सकता है.
- ऐप्लिकेशन डेवलप करना आसान: ज़रूरी अनुमतियां मौजूद होने की गारंटी होती है.
वैकल्पिक अनुमतियों के फ़ायदे:
- बेहतर सुरक्षा: एक्सटेंशन कम अनुमतियों के साथ काम करते हैं, क्योंकि उपयोगकर्ता सिर्फ़ ज़रूरी अनुमतियां चालू करते हैं.
- उपयोगकर्ताओं के लिए बेहतर जानकारी: जब उपयोगकर्ता किसी सुविधा को चालू करता है, तो एक्सटेंशन यह बता सकता है कि उसे किसी खास अनुमति की ज़रूरत क्यों है.
- आसान अपग्रेड: एक्सटेंशन को अपग्रेड करने पर, Chrome उसे उपयोगकर्ताओं के लिए बंद नहीं करेगा. ऐसा तब होगा, जब अपग्रेड में ज़रूरी अनुमतियों के बजाय वैकल्पिक अनुमतियां जोड़ी गई हों.
दूसरा चरण: मेनिफ़ेस्ट में वैकल्पिक अनुमतियों का एलान करना
optional_permissions
बटन की मदद से, अपने एक्सटेंशन मेनिफ़ेस्ट में वैकल्पिक अनुमतियां बताएं. इसके लिए, अनुमतियां फ़ील्ड के फ़ॉर्मैट का इस्तेमाल करें:
{
"name": "My extension",
...
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
अगर आपको सिर्फ़ रनटाइम के दौरान पता चलने वाले होस्ट का अनुरोध करना है, तो अपने एक्सटेंशन के optional_host_permissions
फ़ील्ड में "https://*/*"
शामिल करें. इससे, "Permissions.origins"
में किसी भी ऑरिजिन की जानकारी दी जा सकती है. हालांकि, इसके लिए ज़रूरी है कि उस ऑरिजिन का स्कीम मैच करता हो.
ऐसी अनुमतियां जिन्हें नहीं चुना जा सकता
Chrome एक्सटेंशन की ज़्यादातर अनुमतियों को ज़रूरी के बजाय वैकल्पिक के तौर पर दिखाया जा सकता है. हालांकि, इन अनुमतियों को ज़रूरी के तौर पर दिखाना ज़रूरी है.
अनुमति | ब्यौरा |
---|---|
"debugger" |
chrome.debugger एपीआई, Chrome के रिमोट डीबगिंग प्रोटोकॉल के लिए, एक वैकल्पिक ट्रांसपोर्ट के तौर पर काम करता है. |
"declarativeNetRequest" |
एक्सटेंशन को chrome.declarativeNetRequest एपीआई का ऐक्सेस देता है. |
"devtools" |
इससे एक्सटेंशन, Chrome DevTools की सुविधाओं को बेहतर बना सकता है. |
"geolocation" |
एक्सटेंशन को HTML5 जियोलोकेशन एपीआई का इस्तेमाल करने की अनुमति देता है. |
"mdns" |
इससे एक्सटेंशन को chrome.mdns एपीआई का ऐक्सेस मिलता है. |
"proxy" |
Chrome की प्रॉक्सी सेटिंग मैनेज करने के लिए, एक्सटेंशन को chrome.proxy एपीआई का ऐक्सेस देता है. |
"tts" |
chrome.tts एपीआई, सिंथेटिक टेक्स्ट-टू-स्पीच (टीटीएस) को चलाता है. |
"ttsEngine" |
chrome.ttsEngine एपीआई, एक्सटेंशन का इस्तेमाल करके, लिखाई को बोली में बदलने (टीटीएस) वाले इंजन को लागू करता है. |
"wallpaper" |
सिर्फ़ ChromeOS के लिए. chrome.wallpaper एपीआई का इस्तेमाल करके, ChromeOS का वॉलपेपर बदलें. |
उपलब्ध अनुमतियों और उनसे जुड़ी चेतावनियों के बारे में ज़्यादा जानकारी के लिए, अनुमतियां बताएं लेख पढ़ें.
तीसरा चरण: वैकल्पिक अनुमतियों का अनुरोध करना
permissions.request()
का इस्तेमाल करके, उपयोगकर्ता के जेस्चर से अनुमतियों का अनुरोध करें:
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
chrome.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (granted) => {
// The callback argument will be true if the user granted the permissions.
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
अगर अनुमतियां जोड़ने पर, उपयोगकर्ता को पहले से देखे और स्वीकार किए गए चेतावनी वाले मैसेज से अलग मैसेज दिखते हैं, तो Chrome उपयोगकर्ता से पूछता है. उदाहरण के लिए, पिछले कोड से ऐसा प्रॉम्प्ट दिख सकता है:
चौथा चरण: एक्सटेंशन की मौजूदा अनुमतियां देखना
यह देखने के लिए कि आपके एक्सटेंशन के पास कोई खास अनुमति या अनुमतियों का सेट है या नहीं, permission.contains()
का इस्तेमाल करें:
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
पांचवां चरण: अनुमतियां हटाना
जब आपको अनुमतियों की ज़रूरत न हो, तो उन्हें हटा दें. किसी अनुमति को हटाने के बाद, आम तौर पर permissions.request()
को फिर से कॉल करने पर, उपयोगकर्ता से पूछे बिना ही अनुमति वापस आ जाती है.
chrome.permissions.remove({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
टाइप
Permissions
प्रॉपर्टी
-
origins
string[] ज़रूरी नहीं
होस्ट की अनुमतियों की सूची. इसमें मेनिफ़ेस्ट में
optional_permissions
याpermissions
बटन से जुड़ी अनुमतियां और कॉन्टेंट स्क्रिप्ट से जुड़ी अनुमतियां शामिल हैं. -
अनुमतियां
string[] ज़रूरी नहीं
नाम वाली अनुमतियों की सूची (इसमें होस्ट या ऑरिजिन शामिल नहीं हैं).
तरीके
addHostAccessRequest()
chrome.permissions.addHostAccessRequest(
request: object,
callback?: function,
)
होस्ट के ऐक्सेस का अनुरोध जोड़ता है. उपयोगकर्ता को अनुरोध का सिग्नल सिर्फ़ तब भेजा जाएगा, जब अनुरोध में एक्सटेंशन को होस्ट का ऐक्सेस दिया जा सकता हो. क्रॉस-ऑरिजिन नेविगेशन पर, अनुरोध रीसेट हो जाएगा. स्वीकार किए जाने पर, साइट के मुख्य ऑरिजिन को लगातार ऐक्सेस करने की अनुमति मिलती है
पैरामीटर
-
CANNOT TRANSLATE
ऑब्जेक्ट
-
documentId
स्ट्रिंग ज़रूरी नहीं है
उस दस्तावेज़ का आईडी जहां होस्ट के ऐक्सेस के अनुरोध दिखाए जा सकते हैं. यह किसी टैब में टॉप-लेवल का दस्तावेज़ होना चाहिए. अगर यह जानकारी दी जाती है, तो अनुरोध, दिए गए दस्तावेज़ के टैब पर दिखता है. साथ ही, दस्तावेज़ के किसी नए ऑरिजिन पर नेविगेट करने पर, यह अनुरोध हट जाता है. नया अनुरोध जोड़ने पर,
tabId
के लिए मौजूदा अनुरोध बदल जाएगा. इस याtabId
की जानकारी देना ज़रूरी है. -
पैटर्न
स्ट्रिंग ज़रूरी नहीं है
यूआरएल पैटर्न, जहां होस्ट ऐक्सेस के अनुरोध दिखाए जा सकते हैं. अगर यह पैटर्न दिया जाता है, तो होस्ट के ऐक्सेस के अनुरोध सिर्फ़ इस पैटर्न से मैच करने वाले यूआरएल पर दिखाए जाएंगे.
-
tabId
number ज़रूरी नहीं
उस टैब का आईडी जहां होस्ट के ऐक्सेस के अनुरोध दिखाए जा सकते हैं. अगर यह जानकारी दी जाती है, तो अनुरोध उस टैब पर दिखता है. टैब के किसी नए ऑरिजिन पर जाने पर, अनुरोध हट जाता है. नया अनुरोध जोड़ने पर,
documentId
के लिए मौजूदा अनुरोध बदल जाएगा. इस याdocumentId
की जानकारी देना ज़रूरी है.
-
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
contains()
chrome.permissions.contains(
permissions: Permissions,
callback?: function,
)
यह जांच करता है कि एक्सटेंशन के पास बताई गई अनुमतियां हैं या नहीं.
पैरामीटर
-
अनुमतियां
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(result: boolean) => void
-
नतीजा
बूलियन
अगर एक्सटेंशन के पास बताई गई अनुमतियां हैं, तो यह True होगा. अगर किसी ऑरिजिन को वैकल्पिक अनुमति और कॉन्टेंट स्क्रिप्ट मैच पैटर्न, दोनों के तौर पर बताया गया है, तो जब तक दोनों अनुमतियां नहीं दी जातीं, तब तक यह
false
दिखाएगा.
-
रिटर्न
-
Promise<boolean>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
getAll()
chrome.permissions.getAll(
callback?: function,
)
इससे एक्सटेंशन की मौजूदा अनुमतियों का सेट मिलता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(permissions: Permissions) => void
-
अनुमतियां
एक्सटेंशन की चालू अनुमतियां. ध्यान दें कि
origins
प्रॉपर्टी में, ऐसे ऑरिजिन शामिल होंगे जिन्हें अनुमति दी गई है. ये ऑरिजिन, मेनिफ़ेस्ट मेंpermissions
औरoptional_permissions
कुंजियों में बताए गए ऑरिजिन और कॉन्टेंट स्क्रिप्ट से जुड़े ऑरिजिन होंगे.
-
रिटर्न
-
Promise<Permissions>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
remove()
chrome.permissions.remove(
permissions: Permissions,
callback?: function,
)
यह सुविधा, दी गई अनुमतियों का ऐक्सेस हटा देती है. अनुमतियां हटाने में कोई समस्या होने पर, runtime.lastError
सेट हो जाएगा.
पैरामीटर
-
अनुमतियां
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(removed: boolean) => void
-
निकाला गया
बूलियन
अगर अनुमतियां हटा दी गई हैं, तो True पर सेट करें.
-
रिटर्न
-
Promise<boolean>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
removeHostAccessRequest()
chrome.permissions.removeHostAccessRequest(
request: object,
callback?: function,
)
अगर होस्ट ने ऐक्सेस का अनुरोध किया है, तो उसे हटा देता है.
पैरामीटर
-
CANNOT TRANSLATE
ऑब्जेक्ट
-
documentId
स्ट्रिंग ज़रूरी नहीं है
उस दस्तावेज़ का आईडी जिससे होस्ट ऐक्सेस का अनुरोध हटाया जाएगा. यह किसी टैब में टॉप-लेवल का दस्तावेज़ होना चाहिए. इस या
tabId
की जानकारी देना ज़रूरी है. -
पैटर्न
स्ट्रिंग ज़रूरी नहीं है
वह यूआरएल पैटर्न जहां होस्ट के ऐक्सेस के अनुरोध को हटाया जाएगा. अगर यह पैटर्न दिया गया है, तो यह होस्ट के ऐक्सेस के मौजूदा अनुरोध के पैटर्न से पूरी तरह मैच करना चाहिए.
-
tabId
number ज़रूरी नहीं
उस टैब का आईडी जहां होस्ट के ऐक्सेस का अनुरोध हटाया जाएगा. इस या
documentId
की जानकारी देना ज़रूरी है.
-
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:() => void
रिटर्न
-
Promise<void>
मेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
request()
chrome.permissions.request(
permissions: Permissions,
callback?: function,
)
यह सुविधा, उपयोगकर्ता से प्रॉम्प्ट दिखाकर, बताई गई अनुमतियों का ऐक्सेस पाने का अनुरोध करती है. ये अनुमतियां, मेनिफ़ेस्ट के optional_permissions
फ़ील्ड में दी गई होनी चाहिए या वे ज़रूरी अनुमतियां होनी चाहिए जिन्हें उपयोगकर्ता ने रोका हो. ऑरिजिन पैटर्न में मौजूद पाथ को अनदेखा कर दिया जाएगा. आपके पास ऑरिजिन की वैकल्पिक अनुमतियों के सबसेट का अनुरोध करने का विकल्प है. उदाहरण के लिए, अगर आपने मेनिफ़ेस्ट के optional_permissions
सेक्शन में *://*\/*
की जानकारी दी है, तो http://example.com/
का अनुरोध किया जा सकता है. अनुमतियों का अनुरोध करने में कोई समस्या होने पर, runtime.lastError
सेट हो जाएगा.
पैरामीटर
-
अनुमतियां
-
कॉलबैक
फ़ंक्शन ज़रूरी नहीं
callback
पैरामीटर इस तरह दिखता है:(granted: boolean) => void
-
अनुमति दी गई
बूलियन
अगर उपयोगकर्ता ने बताई गई अनुमतियां दी हैं, तो True.
-
रिटर्न
-
Promise<boolean>
Chrome 96 और उसके बाद के वर्शनमेनिफ़ेस्ट के तीसरे और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.
इवेंट
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
जब एक्सटेंशन नई अनुमतियां पाता है, तब ट्रिगर होता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर इस तरह दिखता है:(permissions: Permissions) => void
-
अनुमतियां
-
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
एक्सटेंशन से अनुमतियों का ऐक्सेस हटाए जाने पर ट्रिगर होता है.
पैरामीटर
-
कॉलबैक
फ़ंक्शन
callback
पैरामीटर इस तरह दिखता है:(permissions: Permissions) => void
-
अनुमतियां
-