chrome.permissions

ब्यौरा

ऐप्लिकेशन इंस्टॉल करने के समय के बजाय, रन टाइम के समय chrome.permissions एपीआई का इस्तेमाल करके, रन टाइम के दौरान उन अनुमतियों का अनुरोध करें जिनकी जानकारी दी गई है. इससे उपयोगकर्ता यह समझ पाते हैं कि इन अनुमतियों की ज़रूरत क्यों है और सिर्फ़ वही अनुमतियां दें जो ज़रूरी हैं.

सिद्धांत और इस्तेमाल

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

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

एक्सटेंशन बटन, जो अतिरिक्त सुविधाओं को चालू करता है.
एक एक्सटेंशन बटन, जो अतिरिक्त सुविधाओं को चालू करता है.

उपयोगकर्ता की सबसे लोकप्रिय साइटों को दिखाने के लिए, topSites की अनुमति ज़रूरी है और यह चेतावनी दी गई है.

TopSites API के लिए, एक्सटेंसन की चेतावनी.
topSites API के लिए एक्सटेंशन से जुड़ी चेतावनी

वैकल्पिक अनुमतियां लागू करना

पहला चरण: तय करें कि कौनसी अनुमतियों की ज़रूरत है और कौनसी अनुमतियां ज़रूरी नहीं हैं

कोई एक्सटेंशन ज़रूरी और वैकल्पिक, दोनों तरह की अनुमतियों का एलान कर सकता है. आम तौर पर, आपको ये काम करने चाहिए:

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

ज़रूरी अनुमतियों के फ़ायदे:

  • कम प्रॉम्प्ट: कोई एक्सटेंशन, उपयोगकर्ता को सभी अनुमतियां स्वीकार करने के लिए एक बार निर्देश दे सकता है.
  • आसान डेवलपमेंट: ज़रूरी अनुमतियां मौजूद होती हैं.

ज़रूरी नहीं अनुमतियों के फ़ायदे:

  • बेहतर सुरक्षा: एक्सटेंशन कम अनुमतियों के साथ चलते हैं, क्योंकि उपयोगकर्ता सिर्फ़ ज़रूरी अनुमतियां चालू करते हैं.
  • उपयोगकर्ताओं के लिए बेहतर जानकारी: कोई एक्सटेंशन यह बता सकता है कि जब उपयोगकर्ता काम की सुविधा को चालू करते हैं, तब उस अनुमति की ज़रूरत क्यों होती है.
  • आसान अपग्रेड: अगर किसी एक्सटेंशन को अपग्रेड किया जाता है, तो 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 geolocation एपीआई का इस्तेमाल करने की अनुमति देता है.
"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

प्रॉपर्टी

  • ऑरिजिन

    स्ट्रिंग[] ज़रूरी नहीं है

    होस्ट की अनुमतियों की सूची. इसमें मेनिफ़ेस्ट की optional_permissions या permissions कुंजियों में बताई गई अनुमतियों के साथ-साथ Content स्क्रिप्ट से जुड़ी अनुमतियां भी शामिल होती हैं.

  • अनुमतियां

    स्ट्रिंग[] ज़रूरी नहीं है

    नाम वाली अनुमतियों की सूची (इसमें होस्ट या ऑरिजिन शामिल नहीं हैं).

तरीके

contains()

वादा
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)

यह जांचता है कि एक्सटेंशन के पास तय की गई अनुमतियां हैं या नहीं.

पैरामीटर

  • अनुमतियां
  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर ऐसा दिखता है:

    (result: boolean)=>void

    • नतीजा

      boolean

      अगर एक्सटेंशन के पास बताई गई अनुमतियां हैं, तो सही. अगर किसी ऑरिजिन को वैकल्पिक अनुमति और कॉन्टेंट स्क्रिप्ट से मेल खाने वाले पैटर्न, दोनों के तौर पर बताया गया है, तो यह false दिखाएगा. ऐसा तब तक होगा, जब तक दोनों अनुमतियां नहीं दी जातीं.

रिटर्न

  • Promise<boolean>

    Chrome 96 के बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

getAll()

वादा
chrome.permissions.getAll(
  callback?: function,
)

एक्सटेंशन के मौजूदा अनुमतियों को कॉन्फ़िगर करता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर ऐसा दिखता है:

    (permissions: Permissions)=>void

    • अनुमतियां

      एक्सटेंशन की चालू अनुमतियां. ध्यान दें कि origins प्रॉपर्टी में, मेनिफ़ेस्ट के permissions और optional_permissions कुंजियों में बताए गए ऑरिजिन शामिल होंगे. साथ ही, Content Scripts से जुड़ी कुंजियों में भी दिए गए ऑरिजिन शामिल होंगे.

रिटर्न

  • <अनुमतियां> का वादा करना

    Chrome 96 के बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

remove()

वादा
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)

बताई गई अनुमतियों का ऐक्सेस हटाता है. अगर अनुमतियां हटाने में कोई समस्या आती है, तो runtime.lastError को सेट कर दिया जाएगा.

पैरामीटर

  • अनुमतियां
  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर ऐसा दिखता है:

    (removed: boolean)=>void

    • हटाया

      boolean

      अगर अनुमतियां हटा दी गई हैं, तो वैल्यू 'सही' होगी.

रिटर्न

  • Promise<boolean>

    Chrome 96 के बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

request()

वादा
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)

तय की गई अनुमतियों के लिए ऐक्सेस का अनुरोध करता है. साथ ही, ज़रूरी होने पर उपयोगकर्ता को एक प्रॉम्प्ट दिखाता है. इन अनुमतियों के बारे में या तो मेनिफ़ेस्ट के optional_permissions फ़ील्ड में बताया जाना चाहिए या ये ऐसी ज़रूरी अनुमतियां होनी चाहिए जिन्हें उपयोगकर्ता ने रोक दिया था. ऑरिजिन पैटर्न पर पाथ को अनदेखा कर दिया जाएगा. वैकल्पिक ऑरिजिन अनुमतियों के सबसेट का अनुरोध किया जा सकता है. उदाहरण के लिए, अगर मेनिफ़ेस्ट के optional_permissions सेक्शन में *://*\/* को तय किया जाता है, तो http://example.com/ का अनुरोध किया जा सकता है. अगर अनुमतियों का अनुरोध करने में कोई समस्या आती है, तो runtime.lastError को सेट कर दिया जाएगा.

पैरामीटर

  • अनुमतियां
  • कॉलबैक

    फ़ंक्शन ज़रूरी नहीं

    callback पैरामीटर ऐसा दिखता है:

    (granted: boolean)=>void

    • अनुमति दी गई

      boolean

      अगर उपयोगकर्ता ने ज़रूरी अनुमतियां दी हैं, तो वैल्यू 'सही' होगी.

रिटर्न

  • Promise<boolean>

    Chrome 96 के बाद के वर्शन

    प्रॉमिस, मेनिफ़ेस्ट V3 और इसके बाद के वर्शन में काम करता है. हालांकि, पुराने सिस्टम के साथ काम करने के लिए कॉलबैक दिए जाते हैं. आप एक ही फ़ंक्शन कॉल पर दोनों का इस्तेमाल नहीं कर सकते. प्रॉमिस उसी टाइप के साथ रिज़ॉल्व हो जाती है जिसे कॉलबैक को पास किया जाता है.

इवेंट

onAdded

chrome.permissions.onAdded.addListener(
  callback: function,
)

एक्सटेंशन को नई अनुमतियां मिलने पर सक्रिय होता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर ऐसा दिखता है:

    (permissions: Permissions)=>void

onRemoved

chrome.permissions.onRemoved.addListener(
  callback: function,
)

एक्सटेंशन से अनुमतियों का ऐक्सेस हटाए जाने पर सक्रिय होता है.

पैरामीटर

  • कॉलबैक

    फ़ंक्शन

    callback पैरामीटर ऐसा दिखता है:

    (permissions: Permissions)=>void