chrome.permissions

ब्यौरा

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

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

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

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

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

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

topSites 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[] ज़रूरी नहीं

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

तरीके

addSiteAccessRequest()

वादा करना बाकी हैMV3+
chrome.permissions.addSiteAccessRequest(
  request: object,
  callback?: function,
)

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

पैरामीटर

  • CANNOT TRANSLATE

    ऑब्जेक्ट

    • documentId

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

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

    • पैटर्न

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

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

    • tabId

      number ज़रूरी नहीं

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

  • कॉलबैक

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

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

    () => void

रिटर्न

  • Promise<void>

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

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 और उसके बाद के वर्शन में, प्रॉमिस का इस्तेमाल किया जा सकता है. हालांकि, पुराने सिस्टम के साथ काम करने की सुविधा के लिए कॉलबैक उपलब्ध कराए गए हैं. एक ही फ़ंक्शन कॉल में, दोनों का इस्तेमाल नहीं किया जा सकता. प्रोमिस, कॉलबैक में पास किए गए टाइप के साथ ही रिज़ॉल्व होता है.

removeSiteAccessRequest()

वादा करना बाकी हैMV3+
chrome.permissions.removeSiteAccessRequest(
  request: object,
  callback?: function,
)

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

पैरामीटर

  • CANNOT TRANSLATE

    ऑब्जेक्ट

    • documentId

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

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

    • पैटर्न

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

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

    • tabId

      number ज़रूरी नहीं

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

  • कॉलबैक

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

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

    () => void

रिटर्न

  • Promise<void>

    मेनिफ़ेस्ट 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