browser.permissions

ब्यौरा

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

कॉन्सेप्ट और इस्तेमाल करने का तरीका

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

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

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

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

topSites API के लिए Axtension की चेतावनी.
topSites एपीआई के लिए एक्सटेंशन की चेतावनी

अनुमति देने का विकल्प लागू करना

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

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

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

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

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

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

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

browser.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() को कॉल करने पर, आम तौर पर उपयोगकर्ता को सूचना दिए बिना ही अनुमति वापस जोड़ दी जाती है.

browser.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 133+ MV3+
chrome.permissions.addHostAccessRequest(
  request: object,
)
: Promise<void>

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

पैरामीटर

  • CANNOT TRANSLATE

    ऑब्जेक्ट

    • documentId

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

      यह उस दस्तावेज़ का आईडी होता है जहां होस्ट ऐक्सेस के अनुरोध दिखाए जा सकते हैं. यह किसी टैब में टॉप-लेवल का दस्तावेज़ होना चाहिए. अगर अनुरोध किया गया है, तो यह अनुरोध उस दस्तावेज़ के टैब पर दिखता है जिसके लिए अनुरोध किया गया है. जब दस्तावेज़ किसी नए ऑरिजिन पर नेविगेट करता है, तब यह अनुरोध हट जाता है. नया अनुरोध जोड़ने पर, tabId के लिए किया गया कोई भी मौजूदा अनुरोध बदल जाएगा. यह या tabId में से किसी एक की जानकारी देना ज़रूरी है.

    • पैटर्न

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

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

    • tabId

      number optional

      उस टैब का आईडी जहां होस्ट ऐक्सेस के अनुरोध दिखाए जा सकते हैं. अगर अनुरोध दिया गया है, तो उसे तय किए गए टैब पर दिखाया जाता है. जब टैब किसी नए ऑरिजिन पर नेविगेट करता है, तब अनुरोध हटा दिया जाता है. नया अनुरोध जोड़ने पर, documentId के लिए मौजूदा अनुरोध बदल जाएगा. यह या documentId में से किसी एक की जानकारी देना ज़रूरी है.

रिटर्न

  • Promise<void>

contains()

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

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

पैरामीटर

रिटर्न

  • Promise<boolean>

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

getAll()

chrome.permissions.getAll(): Promise<Permissions>

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

रिटर्न

  • Promise<Permissions>

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

remove()

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

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

पैरामीटर

रिटर्न

  • Promise<boolean>

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

removeHostAccessRequest()

Chrome 133+ MV3+
chrome.permissions.removeHostAccessRequest(
  request: object,
)
: Promise<void>

अगर होस्ट के ऐक्सेस का अनुरोध मौजूद है, तो उसे हटाता है.

पैरामीटर

  • CANNOT TRANSLATE

    ऑब्जेक्ट

    • documentId

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

      उस दस्तावेज़ का आईडी जहां से होस्ट ऐक्सेस का अनुरोध हटाया जाएगा. यह किसी टैब में टॉप-लेवल का दस्तावेज़ होना चाहिए. यह या tabId में से किसी एक की जानकारी देना ज़रूरी है.

    • पैटर्न

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

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

    • tabId

      number optional

      उस टैब का आईडी जहां से होस्ट के ऐक्सेस का अनुरोध हटाया जाएगा. यह या documentId में से किसी एक की जानकारी देना ज़रूरी है.

रिटर्न

  • Promise<void>

request()

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

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

पैरामीटर

रिटर्न

  • 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