chrome.permissions

ब्यौरा

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

खास जानकारी

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

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

अन्य सुविधाओं को चालू करने वाला एक्सटेंशन बटन

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

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 की सुविधाओं को बेहतर बना सकता है.
"experimental" सिर्फ़ कैनरी और डेव चैनल पर. एक्सटेंशन को chrome.experimental एपीआई का ऐक्सेस देता है.
"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 उपयोगकर्ता से पूछता है. उदाहरण के लिए, पिछले कोड से ऐसा प्रॉम्प्ट दिख सकता है:

example permission confirmation prompt

चौथा चरण: एक्सटेंशन की मौजूदा अनुमतियां देखना

यह देखने के लिए कि आपके एक्सटेंशन के पास कोई खास अनुमति या अनुमतियों का सेट है या नहीं, 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[] ज़रूरी नहीं

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

तरीके

contains()

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

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

पैरामीटर

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

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

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

    (result: boolean) => void

    • नतीजा

      बूलियन

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

रिटर्न

  • Promise<boolean>

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

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

getAll()

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

इससे एक्सटेंशन की मौजूदा अनुमतियों का सेट मिलता है.

पैरामीटर

  • कॉलबैक

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

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

    (permissions: Permissions) => void

    • अनुमतियां

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

रिटर्न

  • Promise<Permissions>

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

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

remove()

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

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

पैरामीटर

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

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

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

    (removed: boolean) => void

    • निकाला गया

      बूलियन

      अगर अनुमतियां हटा दी गई हैं, तो True पर सेट करें.

रिटर्न

  • 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

    • अनुमति दी गई

      बूलियन

      अगर उपयोगकर्ता ने बताई गई अनुमतियां दी हैं, तो True.

रिटर्न

  • 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