chrome.permissions

ब्यौरा

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

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

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

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

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

उपयोगकर्ता की सबसे अच्छी साइटें दिखाने के लिए 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 एपीआई, एक्सटेंशन का इस्तेमाल करने वाला लिखाई को बोली में बदलने वाला (TTS) इंजन.
"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

प्रॉपर्टी

  • ऑरिजिन

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

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

  • अनुमतियां

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

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

तरीके

contains()

प्रॉमिस
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)

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

पैरामीटर

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

    फ़ंक्शन वैकल्पिक

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

    (result: boolean) => void

    • नतीजा

      बूलियन

      अगर एक्सटेंशन में तय की गई अनुमतियां हैं, तो 'सही'. अगर ऑरिजिन को वैकल्पिक अनुमति और कॉन्टेंट स्क्रिप्ट मैच पैटर्न, दोनों के तौर पर बताया गया है, तो यह तब तक 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

    • निकाला गया

      बूलियन

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

रिटर्न

  • 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

    • अनुमति दी गई

      बूलियन

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

रिटर्न

  • 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