google chrome extension - वैकल्पिक रूप से सामग्री स्क्रिप्ट इंजेक्ट करें




google-chrome-extension content-script (2)

आप उपयुक्त अनुमति के बिना किसी साइट पर कोड नहीं चला सकते। सौभाग्य से, आप होस्ट की अनुमतियों को optional_permissions फ़ाइल में वैकल्पिक रूप से उन्हें घोषित करने के लिए वैकल्पिक फ़ाइल में जोड़ सकते हैं और फिर भी एक्सटेंशन का उपयोग करने की अनुमति दे सकते हैं।

एक उपयोगकर्ता के इशारे के जवाब में, आप अतिरिक्त अनुमतियों का अनुरोध करने के लिए chrome.permission.request का उपयोग कर सकते हैं। इस API का उपयोग केवल एक्सटेंशन पेज (बैकग्राउंड पेज, पॉपअप पेज, विकल्प पेज, ...) में किया जा सकता है। Chrome 36.0.1957.0 के अनुसार, आवश्यक उपयोगकर्ता इशारा सामग्री स्क्रिप्ट से भी अधिक होता है, इसलिए यदि आप चाहते हैं, तो आप सामग्री स्क्रिप्ट से एक क्लिक ईवेंट श्रोता जोड़ सकते हैं और पृष्ठभूमि पृष्ठ पर अनुरोध भेजने के लिए chrome.runtime.sendMessage का उपयोग कर सकते हैं , जो बदले में chrome.permissions.request कॉल chrome.permissions.request

टैब में वैकल्पिक कोड निष्पादन

होस्ट अनुमतियाँ (वैकल्पिक या अनिवार्य) प्राप्त करने के बाद, आपको किसी तरह मिलान पृष्ठों में सामग्री स्क्रिप्ट (या सीएसएस शैली) को इंजेक्ट करना होगा। मेरी प्राथमिकता के क्रम में कुछ विकल्प हैं:

  1. पृष्ठ में एक सामग्री स्क्रिप्ट सम्मिलित करने के लिए chrome.declarativeContent.RequestContentScript कार्रवाई का उपयोग करें। प्रलेखन पढ़ें यदि आप सीखना चाहते हैं कि इस एपीआई का उपयोग कैसे करें।

  2. जब उपयोगकर्ता ने पृष्ठ पर नेविगेट किया है, तो यह पता लगाने के लिए webNavigation API (जैसे chrome.webNavigation.onCommitted ) का उपयोग करें, फिर टैब में सामग्री स्क्रिप्ट सम्मिलित करने के लिए chrome.tabs.executeScript का उपयोग करें (या शैलियों को सम्मिलित करने के लिए chrome.tabs.insertCSS )।

  3. यह पता लगाने के लिए कि किसी पृष्ठ में बदलाव हुआ है, और chrome.tabs.executeScript का उपयोग करके पृष्ठ में एक सामग्री स्क्रिप्ट सम्मिलित करने के लिए tabs API ( chrome.tabs.onUpdated ) का उपयोग chrome.tabs.executeScript

मैं दृढ़ता से विकल्प 1 की सिफारिश करता हूं, क्योंकि यह विशेष रूप से इस उपयोग के मामले के लिए डिज़ाइन किया गया था। नोट: यह एपीआई क्रोम 38 में जोड़ा गया था, लेकिन केवल क्रोम 39 के बाद से वैकल्पिक अनुमतियों के साथ काम किया। " chrome.declarativeContent.RequestContentScript बावजूद chrome.declarativeContent.RequestContentScript " प्रलेखन में, एपीआई वास्तव में स्थिर पर समर्थित है। शुरू में विचार था कि एपीआई को स्थिर करने से पहले समीक्षा का इंतजार करना चाहिए , लेकिन वह समीक्षा कभी नहीं आई और इसलिए अब यह एपीआई लगभग दो वर्षों से ठीक काम कर रहा है।

दूसरा और तीसरा विकल्प समान हैं। दोनों के बीच अंतर यह है कि webNavigation API का उपयोग करने से अतिरिक्त अनुमति चेतावनी ("अपना ब्राउज़िंग इतिहास पढ़ें") जुड़ जाती है। इस चेतावनी के लिए, आपको एक एपीआई मिलता है जो कुशलता से नेविगेट को फ़िल्टर कर सकता है, इसलिए chrome.tabs.executeScript कॉल की संख्या कम से कम की जा सकती है।

यदि आप इस अतिरिक्त अनुमति चेतावनी को अपने अनुमति संवाद में नहीं लगाना चाहते हैं, तो आप आँख बंद करके हर टैब पर इंजेक्ट करने का प्रयास कर सकते हैं। यदि आपके विस्तार की अनुमति है, तो इंजेक्शन सफल होगा। अन्यथा, यह विफल रहता है। यह बहुत कुशल नहीं लगता है, और यह नहीं है ... उज्ज्वल पक्ष पर, इस पद्धति को किसी भी अतिरिक्त अनुमति की आवश्यकता नहीं है।

बाद के दो तरीकों में से किसी एक का उपयोग करके, आपकी सामग्री स्क्रिप्ट को इस तरह से डिज़ाइन किया जाना चाहिए कि यह कई सम्मिलन (जैसे एक गार्ड के साथ ) को संभाल सके। फ़्रेम में सम्मिलित करना भी समर्थित है ( allFrames:true ), लेकिन केवल तभी जब आपके एक्सटेंशन को टैब के URL (या फ्रेम के URL को सेट किया गया हो तो frameId सेट करने की अनुमति दी frameId है)।

एक्सटेंशन स्क्रिप्ट फ़ाइल में घोषित करके सामग्री स्क्रिप्ट को प्रोग्राम या स्थायी रूप से इंजेक्ट किया जा सकता है। प्रोग्रामेटिक इंजेक्शन के लिए मेजबान की अनुमति की आवश्यकता होती है, जो आमतौर पर ब्राउज़र या पेज एक्शन द्वारा दिया जाता है।

मेरे उपयोग के मामले में, मैं उपयोगकर्ता कार्रवाई के बिना gmail, outlook.com और याहू मेल वेब साइट को इंजेक्ट करना चाहता हूं। मैं उन सभी को प्रकट करके घोषित कर सकता हूं, लेकिन ऐसा करने से उन खाते तक सभी डेटा पहुंच की आवश्यकता होती है। कुछ उपयोग केवल outlook.com देना चाहते हैं, लेकिन जीमेल नहीं। प्रोग्रामैटिक इंजेक्शन काम नहीं करता है क्योंकि मुझे पता होना चाहिए कि इंजेक्शन कब देना है। टैब की अनुमति का उपयोग करने के लिए भी एक अन्य अनुमति की आवश्यकता होती है।

क्या वैकल्पिक रूप से वेब साइट को इंजेक्ट करने का कोई अच्छा तरीका है?


चूंकि मौजूदा उत्तर अब कुछ साल पुराना है, इसलिए वैकल्पिक इंजेक्शन अब बहुत आसान है और यहां वर्णित है । यह कहता है कि नई फ़ाइल को सशर्त रूप से इंजेक्ट करने के लिए, आप निम्न कोड का उपयोग कर सकते हैं:

// The lines I have commented are in the documentation, but the uncommented
// lines are the important part

//chrome.runtime.onMessage.addListener((message, callback) => {
//   if (message == “runContentScript”){

        chrome.tabs.executeScript({
          file: 'contentScript.js'
        });

//   }
//});

ऐसा करने के लिए आपको सक्रिय टैब अनुमति की आवश्यकता होगी।





content-script