chrome.permissions

ब्यौरा

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

खास जानकारी

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

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

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

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

topSites API के लिए एक्सटेंशन की चेतावनी

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

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

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

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

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

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

वैकल्पिक अनुमतियों के फ़ायदे:

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

दूसरा चरण: मेनिफ़ेस्ट में वैकल्पिक अनुमतियों की जानकारी देना

optional_permissions कुंजी का इस्तेमाल करके, अपने एक्सटेंशन मेनिफ़ेस्ट में वैकल्पिक अनुमतियों की घोषणा करें. इसके लिए, 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 API का ऐक्सेस मिलता है.
"devtools" इस कुकी से एक्सटेंशन को Chrome DevTools की सुविधाओं को बढ़ाने की अनुमति मिलती है.
"experimental" सिर्फ़ Canary और डेव चैनल पर उपलब्ध है. इस अनुमति से एक्सटेंशन को chrome.experimental API का ऐक्सेस मिलता है.
"geolocation" इस अनुमति से एक्सटेंशन, HTML5 जियोलोकेशन API का इस्तेमाल कर सकता है.
"mdns" इस अनुमति से एक्सटेंशन को chrome.mdns API को ऐक्सेस करने की अनुमति मिलती है.
"proxy" इस अनुमति से एक्सटेंशन को chrome.proxy API का ऐक्सेस मिलता है. इससे वह Chrome की प्रॉक्सी सेटिंग मैनेज कर पाता है.
"tts" chrome.tts एपीआई, सिंथेसाइज़ किए गए टेक्स्ट को बोली में बदलने (टीटीएस) की सुविधा देता है.
"ttsEngine" chrome.ttsEngine API, एक्सटेंशन का इस्तेमाल करके लिखाई को बोली में बदलने (टीटीएस) वाले इंजन को लागू करता है.
"wallpaper" सिर्फ़ ChromeOS के लिए. ChromeOS का वॉलपेपर बदलने के लिए, chrome.wallpaper एपीआई का इस्तेमाल करें.

उपलब्ध अनुमतियों और उनसे जुड़ी चेतावनियों के बारे में ज़्यादा जानकारी के लिए, अनुमतियों का एलान करना और उपयोगकर्ताओं को चेतावनी देना लेख पढ़ें.

तीसरा चरण: वैकल्पिक अनुमतियों का अनुरोध करना

उपयोगकर्ता के जेस्चर के दौरान, 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

प्रॉपर्टी

  • ओरिजन

    string[] ज़रूरी नहीं है

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

  • अनुमतियां

    string[] ज़रूरी नहीं है

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

तरीके

contains()

Promise
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

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

पैरामीटर

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

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

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

    (result: boolean) => void

    • नतीजा

      बूलियन

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

रिटर्न

  • Promise<boolean>

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

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा.

getAll()

Promise
chrome.permissions.getAll(
  callback?: function,
)
: Promise<Permissions>

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

पैरामीटर

  • कॉलबैक

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

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

    (permissions: Permissions) => void

    • अनुमतियां

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

रिटर्न

  • Promise<Permissions>

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

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा.

remove()

Promise
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

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

पैरामीटर

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

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

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

    (removed: boolean) => void

    • निकाला गया

      बूलियन

      अनुमतियां हटाए जाने पर, यह फ़ंक्शन True दिखाता है.

रिटर्न

  • Promise<boolean>

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

    प्रॉमिस सिर्फ़ मेनिफ़ेस्ट V3 और इसके बाद के वर्शन के लिए काम करते हैं. अन्य प्लैटफ़ॉर्म को कॉलबैक का इस्तेमाल करना होगा.

request()

Promise
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)
: Promise<boolean>

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

पैरामीटर

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

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

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

    (granted: boolean) => void

    • अनुमति दी गई

      बूलियन

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

रिटर्न

  • 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