"activeTab" अनुमति

"activeTab" अनुमति से, किसी एक्सटेंशन को मौजूदा ऐक्टिव टैब का कुछ समय के लिए ऐक्सेस मिलता है. ऐसा तब होता है, जब उपयोगकर्ता एक्सटेंशन को शुरू करता है. उदाहरण के लिए, उसकी कार्रवाई पर क्लिक करके. टैब का ऐक्सेस तब तक रहता है, जब तक उपयोगकर्ता उस पेज पर रहता है. जब उपयोगकर्ता उस पेज से हट जाता है या टैब बंद कर देता है, तो ऐक्सेस वापस ले लिया जाता है. उदाहरण के लिए, अगर उपयोगकर्ता https://example.com पर एक्सटेंशन को चालू करता है और फिर https://example.com/foo पर जाता है, तो एक्सटेंशन के पास पेज का ऐक्सेस बना रहेगा. अगर उपयोगकर्ता https://chromium.org पर जाता है, तो ऐक्सेस वापस ले लिया जाता है.

यह "<all_urls>" के कई इस्तेमाल के लिए एक विकल्प के तौर पर काम करता है. हालांकि, इंस्टॉल करने के दौरान कोई चेतावनी वाला मैसेज नहीं दिखता:

"activeTab" के बिना:

activeTab के बिना

"activeTab" के साथ:

activeTab के साथ

पाबंदी वाले पेजों को ऐक्सेस नहीं किया जा सकता. जैसे, chrome:// पेज.

उदाहरण

Page Redder सैंपल एक्सटेंशन देखें:

manifest.json:

{
  "name": "Page Redder",
  "version": "2.0",
  "permissions": [
    "activeTab",
    "scripting"
  ],
  "background": {
    "service_worker": "service-worker.js"
  },
  "action": {
    "default_title": "Make this page red"
  },
  "manifest_version": 3
}

service-worker:

function reddenPage() {
  document.body.style.backgroundColor = 'red';
}

browser.action.onClicked.addListener((tab) => {
  // If the tab URL is not set, it is a restricted page.
  if (tab.url) {
    browser.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

वजह

मान लें कि वेब क्लिपिंग एक्सटेंशन में एक ऐक्शन और एक कॉन्टेक्स्ट मेन्यू आइटम है. इस एक्सटेंशन को टैब ऐक्सेस करने की ज़रूरत सिर्फ़ तब पड़ सकती है, जब इसकी कार्रवाई पर क्लिक किया जाए या इसके कॉन्टेक्स्ट मेन्यू आइटम को लागू किया जाए.

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

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

"activeTab" से क्या किया जा सकता है

किसी टैब के लिए "activeTab" की अनुमति चालू होने पर, कोई एक्सटेंशन ये काम कर सकता है:

  • अगर "scripting" अनुमति का एलान भी किया गया है, तो उस टैब पर scripting.insertCSS() या scripting.executeScript() को कॉल करें. ऐसा ऊपर दिए गए उदाहरण में किया गया है.
  • उस टैब का यूआरएल, टाइटल, और फ़ेविकॉन पाने के लिए, ऐसे एपीआई का इस्तेमाल करें जो tabs.Tab ऑब्जेक्ट दिखाता हो. (ज़रूरी तौर पर, "activeTab" कुछ समय के लिए होस्ट की अनुमति देता है).
  • webRequest एपीआई का इस्तेमाल करके, टैब में मौजूद नेटवर्क के अनुरोधों को टैब के मुख्य फ़्रेम के ऑरिजिन पर इंटरसेप्ट करना. एक्सटेंशन को टैब के मुख्य फ़्रेम ऑरिजिन के लिए, कुछ समय के लिए होस्ट की अनुमतियां मिलती हैं.

activeTab को शुरू करना

उपयोगकर्ता के इन जेस्चर से, "activeTab" की अनुमति चालू हो जाती है: