"activeTab" अनुमति

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

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

"activeTab" के बिना:

ActiveTab के बिना

"activeTab" के साथ:

ActiveTab के साथ

उदाहरण

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
}

सेवा देने वाला व्यक्ति:

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

chrome.action.onClicked.addListener((tab) => {
  if (!tab.url.includes('chrome://')) {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      func: reddenPage
    });
  }
});

वजह

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

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

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

"activeTab" क्या अनुमति देता है

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

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

ActiveTab को शुरू करना

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