होस्ट की अनुमतियों के लिए उपयोगकर्ता कंट्रोल: ट्रांज़िशन गाइड

खास जानकारी

क्या बदलाव होने वाले हैं?

Chrome 70 की शुरुआत से, उपयोगकर्ता एक्सटेंशन के होस्ट के ऐक्सेस को साइटों की कस्टम सूची तक सीमित कर सकते हैं या एक्सटेंशन को कॉन्फ़िगर कर सकते हैं, ताकि मौजूदा पेज का ऐक्सेस पाने के लिए क्लिक करने पर क्लिक करना पड़े.

किन एपीआई पर असर पड़ा है?

इस बदलाव का असर उन सभी एपीआई पर पड़ता है जिन पर आपके एक्सटेंशन के मेनिफ़ेस्ट में बताई गई होस्ट की अनुमतियों के साथ-साथ, कॉन्टेंट स्क्रिप्ट का भी असर पड़ता है. जिन एपीआई को होस्ट की अनुमतियों की ज़रूरत होती है उनमें webRequest, कुकी, tabs.executeScript() और tabs.insertCSS() और क्रॉस-ऑरिजिन अनुरोध करना शामिल है. जैसे, XMLHTTPRequest या fetch() एपीआई की मदद से क्रॉस-ऑरिजिन अनुरोध करना.

ऐक्सेस पर पाबंदी लगाई जा रही है

उपयोगकर्ता ऐक्सेस पर पाबंदी कैसे लगा सकता है?

उपयोगकर्ता चुन सकते हैं कि आपके एक्सटेंशन को क्लिक करने पर, साइटों के खास सेट पर या अनुरोध की गई सभी साइटों पर चलाने की अनुमति दी जाए. ये विकल्प, उपयोगकर्ताओं को chrome://extensions पेज के साथ-साथ एक्सटेंशन संदर्भ मेन्यू में भी दिखाए जाते हैं.

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

यदि कोई उपयोगकर्ता मेरे एक्सटेंशन को "क्लिक पर" चलाने का विकल्प चुनता है, तो क्या होगा?

एक्सटेंशन वैसा ही काम करता है जैसे कि उसने activeTab अनुमति का इस्तेमाल किया हो. एक्सटेंशन को उस होस्ट को कुछ समय के लिए ऐक्सेस दिया जाता है जिस पर उपयोगकर्ता, एक्सटेंशन पर क्लिक करता है. ऐसा तब किया जाता है, जब एक्सटेंशन ने होस्ट के लिए अनुरोध किया हो (और वह पाबंदी वाली साइट न हो, जैसे कि chrome://settings). जब उसे क्लिक पर चलाने के लिए सेट किया जाता है, तब Chrome आपके एक्सटेंशन को सर्कल और ड्रॉप शैडो (नीचे देखें) से बैज करता है. इससे पता चलता है कि एक्सटेंशन किसी खास साइट से ऐक्सेस करने का अनुरोध कर रहा है.

टूलबार में एक्सटेंशन आइकॉन में जोड़े गए बैज का स्क्रीनशॉट

यदि कोई उपयोगकर्ता कुछ खास साइटों पर मेरा एक्सटेंशन चलाने का विकल्प चुनता है, तो क्या होगा?

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

यदि कोई उपयोगकर्ता सभी साइटों पर मेरा एक्सटेंशन चलाने का विकल्प चुनता है, तो क्या होगा?

एक्सटेंशन, मेनिफ़ेस्ट में अनुरोध की गई किसी भी साइट को अपने-आप ऐक्सेस कर सकता है.

एपीआई का व्यवहार

वेब अनुरोध एपीआई

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

सामग्री स्क्रिप्ट, tab.executScript(), tab.insertCSS()

यह एक्सटेंशन अब भी उन सभी साइटों के लिए, स्क्रिप्ट और स्टाइल शीट अपने-आप इंजेक्ट कर सकता है जिनका ऐक्सेस उसके पास है. जिन साइटों के पास एक्सटेंशन का ऐक्सेस नहीं है उनके लिए Chrome, एक्सटेंशन को बैज करता है. इससे यह पता चलता है कि एक्सटेंशन, पेज के ऐक्सेस का अनुरोध करता है. इसके बाद उपयोगकर्ता, एक्सटेंशन को ऐक्सेस दे सकता है. अगर कॉन्टेंट स्क्रिप्ट को document_idle पर इंजेक्ट करने के लिए सेट किया गया है, तो स्क्रिप्ट तुरंत इंजेक्ट हो जाएगी. अगर ऐसा नहीं है, तो Chrome, उपयोगकर्ता को पेज रीफ़्रेश करने का अनुरोध करता है. इससे आपके एक्सटेंशन को, पेज लोड में पहले (document_start या document_end पर) स्क्रिप्ट इंजेक्ट करने की अनुमति देनी होती है. tabs.executeScript() और tabs.insertCSS() तरीके के लिए कॉलबैक सिर्फ़ तब शुरू किए जाते हैं, जब उपयोगकर्ता ने साइट को ऐक्सेस करने की अनुमति दी हो.

कुकी और बैकग्राउंड पेज XHR

यह एक्सटेंशन अब भी साइटों से किसी भी कुकी को पढ़ सकता है और उसमें बदलाव कर सकता है. साथ ही, उसके पास जिन साइटों का ऐक्सेस है उन पर क्रॉस-ऑरिजिन XHR का इस्तेमाल कर सकता है. किसी एक्सटेंशन पेज से किसी दूसरे ऑरिजिन की कुकी या XHRing को दूसरे होस्ट को ऐक्सेस करने वाला कोई टैब नहीं होता, इसलिए Chrome, एक्सटेंशन को बैज नहीं करता. ऐसा उपयोगकर्ता को यह बताने के लिए नहीं किया जाता कि एक्सटेंशन किसी साइट को ऐक्सेस करने का अनुरोध कर रहा है. किसी दूसरी साइट के लिए कुकी ऐक्सेस करने या क्रॉस-ऑरिजिन XHR बनाने की कोशिश करना, गड़बड़ी के साथ फ़ेल हो जाएगा और ऐसा लगेगा कि एक्सटेंशन के मेनिफ़ेस्ट में होस्ट की अनुमति शामिल नहीं है. ऐसे मामलों में, हमारा सुझाव है कि आप वैकल्पिक अनुमतियों का इस्तेमाल करें, ताकि उपयोगकर्ता अलग-अलग साइटों को रनटाइम ऐक्सेस दे सके.

नीचे दिए गए उदाहरण में बताया गया है कि यह कुकी एपीआई के लिए कैसे काम कर सकता है.

पहले:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

बाद में:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

माइग्रेशन

गलत असर से बचने के सबसे सही तरीके क्या हैं?

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

मेरे मौजूदा उपयोगकर्ताओं की सेटिंग का क्या होगा?

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

मैं यह कैसे देखूं कि मेरे एक्सटेंशन को किसी साइट पर चलाने की अनुमति है या नहीं?

permissions.contains() एपीआई का इस्तेमाल करके, यह पता लगाया जा सकता है कि आपके एक्सटेंशन को किसी दिए गए ऑरिजिन का ऐक्सेस दिया गया है या नहीं.