जांचें कि उपयोगकर्ता के पास Chrome एक्सटेंशन इंस्टॉल है या नहीं


97

मैं एक क्रोम एक्सटेंशन के निर्माण की प्रक्रिया में हूं, और पूरी तरह से काम करने के लिए जिस तरह से मैं इसे पसंद करूंगा, मुझे एक बाहरी जावास्क्रिप्ट स्क्रिप्ट की आवश्यकता है ताकि यह पता लगाया जा सके कि उपयोगकर्ता ने मेरा एक्सटेंशन इंस्टॉल किया है।

उदाहरण के लिए: एक उपयोगकर्ता मेरा प्लगइन स्थापित करता है, फिर उस पर मेरी स्क्रिप्ट के साथ एक वेबसाइट पर जाता है। वेबसाइट यह बताती है कि मेरा एक्सटेंशन इंस्टॉल है और उसके अनुसार पेज को अपडेट करता है।

क्या यह संभव है?


2
हां, एक्सटेंशन का पता लगाना संभव है, इसलिए जब तक आप अपनी एक्सटेंशन आईडी (जो मुझे यकीन है कि आप करते हैं) को जानते हैं। अधिक जानकारी के लिए इस साइट की जाँच करें: blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html 'अपने ऐडफ़ोन को एक-एक करके' पर अनुभाग पर जाएँ। सौभाग्य!
मार्टिन ह्यूजेस

इसे लागू करने का उचित तरीका BJury बलो द्वारा वर्णित है।
रहटुर

इस पोस्ट ने मदद की: ide.hey.network/post/5c3b6c7aa7af38479accc0c7
nab।

जवाबों:


46

मुझे यकीन है कि एक सीधा तरीका है (सीधे अपने एक्सटेंशन पर फ़ंक्शन कॉल करना, या एक्सटेंशन के लिए जेएस कक्षाओं का उपयोग करके), लेकिन एक अप्रत्यक्ष विधि (जब तक कुछ बेहतर साथ नहीं आता):

अपने Chrome एक्सटेंशन को अपने पेज पर एक विशिष्ट DIV या अन्य तत्व के लिए देखें, जिसमें एक बहुत ही विशिष्ट ID हो।

उदाहरण के लिए:

<div id="ExtensionCheck_JamesEggersAwesomeExtension"></div>

एक करें getElementByIdऔर innerHTMLअपने एक्सटेंशन या कुछ के संस्करण संख्या पर सेट करें । फिर आप उस क्लाइंट-साइड की सामग्री को पढ़ सकते हैं।

फिर भी, आपको एक उपलब्ध होने पर एक सीधी विधि का उपयोग करना चाहिए।


संपादित करें: प्रत्यक्ष विधि मिली !!

यहां मिले कनेक्शन विधियों का उपयोग करें: https://developer.chrome.com/extensions/extension#global-events

निष्कलंक, लेकिन आपको करने में सक्षम होना चाहिए ...

var myPort=chrome.extension.connect('yourextensionid_qwerqweroijwefoijwef', some_object_to_send_on_connect);

2
hmmm chrome.extension.connect केवल तभी काम करता है जब एक्सटेंशन (या किसी एक्सटेंशन) के भीतर से निष्पादित किया जाता है। मुझे इसे किसी भी यादृच्छिक js स्क्रिप्ट से काम करने की आवश्यकता है। कोई विचार?

अजीब बात है, प्रलेखन का कहना है कि यह काम करना चाहिए। "अन्य क्रोम के विपरीत। * एपीआई, chrome.extension के कुछ हिस्सों में सामग्री स्क्रिप्ट के द्वारा किया जा सकता" और यह सूचियों sendRequest(), onRequest, connect(), onRequest, और getURL()
ब्रैड

@ जेम्स क्या आप उस स्क्रिप्ट को निष्पादित कर रहे हैं जो होस्ट की गई स्क्रिप्ट से .connect () का उपयोग करती है? मुझे पता है कि क्रोम केवल स्थानीय फ़ाइलों के साथ सामान नहीं करने के लिए कड़ी मेहनत करता है जिन्हें सुरक्षा उद्देश्यों के लिए होस्ट नहीं किया गया है। - बस जाँच रहा हूँ।
जेम्सएगर्स

@ जिस स्क्रिप्ट को मैं निष्पादित कर रहा हूं, उससे .connect () उसी सर्वर पर है यदि आपका मतलब क्या है?

23
अंतिम विधि अब मान्य नहीं है , क्योंकि connectफ़ंक्शन को chrome.runtimeनाम स्थान पर ले जाया गया था । अधिक अप-टू-डेट संस्करण के लिए BJury का जवाब (और टिप्पणियां) देखें
Xan

117

क्रोम में अब वेबसाइट से एक्सटेंशन तक संदेश भेजने की क्षमता है।

तो एक्सटेंशन बैकग्राउंड में। Js (content.js काम नहीं करेगा) कुछ इस तरह जोड़ें:

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        if (request) {
            if (request.message) {
                if (request.message == "version") {
                    sendResponse({version: 1.0});
                }
            }
        }
        return true;
    });

यह आपको वेबसाइट से कॉल करने देगा:

var hasExtension = false;

chrome.runtime.sendMessage(extensionId, { message: "version" },
    function (reply) {
        if (reply) {
            if (reply.version) {
                if (reply.version >= requiredVersion) {
                    hasExtension = true;
                }
            }
        }
        else {
          hasExtension = false;
        }
    });

फिर आप हैक्स्टेंशन चर की जांच कर सकते हैं। एकमात्र दोष यह है कि कॉल अतुल्यकालिक है, इसलिए आपको किसी भी तरह से काम करना होगा।

संपादित करें: के रूप में नीचे वर्णित है, तो आप के लिए एक प्रवेश जोड़ने की आवश्यकता होगी manifest.json कि कर सकते हैं संदेश अपने ऐड-ऑन डोमेन लिस्टिंग। उदाहरण के लिए:

"externally_connectable": {
    "matches": ["*://localhost/*", "*://your.domain.com/*"]
},

2
यह एक आकर्षण की तरह काम करता है। एक और खामी यह है कि आपको एक्सटेंशन को नियंत्रित करना होगा - आप यह देखने के लिए उपयोग नहीं कर सकते हैं कि क्या एक मनमाना थर्ड-पार्टी एक्सटेंशन स्थापित है।
एरिक पी

2
@ ईआरसीपी मूल प्रश्न में कहा गया है कि वे विस्तार से लिख रहे थे, इसलिए यह मुद्दा गड़बड़ है।
बीजेरी

13
आपको अपने मेनिफ़ेस्ट में भी जोड़ना होगा। Json : "externally_connectable": {"मैच": [" : // .yourdomain.com / *"]}
noname

3
यह होना चाहिए {संस्करण: '1.0'} और न कि {संस्करण: 1.0} या फिर आपको 'अनलॉक्ड सिंटैक्स्योर: अनपेक्षित नंबर' मिलेगा, जो विस्तार से देखने के लिए सांत्वना देता है।
ईटी-सीएस

1
"चेकिंग" पक्ष (किसी दिए गए एक्सटेंशन की उपलब्धता की जांच करने की कोशिश करने वाला वेब पेज), chrome.runtime अपरिभाषित है, linux पर क्रोम 36 है।
वास्तव में

22

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

मान लीजिए कि आपके एक्सटेंशन की आईडी है aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa, और आप test.pngअपने एक्सटेंशन की फ़ाइलों की तरह एक फ़ाइल (जैसे, एक पारदर्शी पिक्सेल छवि) जोड़ते हैं ।

उसके बाद, आप इस फ़ाइल को web_accessible_resourcesप्रकट पृष्ठों वाले वेब पेजों में उजागर करते हैं :

  "web_accessible_resources": [
    "test.png"
  ],

अपने वेब पेज में, आप इस फ़ाइल को इसके पूर्ण URL (एक <img>टैग में, XHR के माध्यम से, या किसी अन्य तरीके से) लोड करने का प्रयास कर सकते हैं :

chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/test.png

यदि फ़ाइल लोड होती है, तो एक्सटेंशन इंस्टॉल हो जाता है। यदि इस फ़ाइल को लोड करते समय कोई त्रुटि है, तो एक्सटेंशन स्थापित नहीं है।

// Code from https://groups.google.com/a/chromium.org/d/msg/chromium-extensions/8ArcsWMBaM4/2GKwVOZm1qMJ
function detectExtension(extensionId, callback) { 
  var img; 
  img = new Image(); 
  img.src = "chrome-extension://" + extensionId + "/test.png"; 
  img.onload = function() { 
    callback(true); 
  }; 
  img.onerror = function() { 
    callback(false); 
  };
}

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


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

इसके बाद फाइल URL की तरह उपलब्ध होगी:

moz-extension://<random-UUID>/<path/to/resource>

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

हालाँकि, जब एक्सटेंशन runtime.getURL()इस पते को प्राप्त करने के लिए उपयोग कर सकता है, तो आप इसे अपनी वेबसाइट में हार्ड-कोड नहीं कर सकते।


हालाँकि इस जवाब में stackoverflow.com/a/9216924/1504300 से "रस" मिलता है , IMHO विस्तार में संसाधन को उजागर करने और तथ्य के रूप में कुछ बहुत महत्वपूर्ण संकेत जोड़ता है, जो आप अस्तित्व की जाँच के लिए एक ajax अनुरोध का उपयोग कर सकते हैं (छवि वस्तु) केवल HTML5 पर उपलब्ध लगता है अगर मैं गलत नहीं हूँ goo.gl/HBeI1i )। इस उत्तर में जानकारी के साथ मैं इस समस्या को हल करने में सक्षम हो गया, मैंने इसे "आउट ऑफ द बॉक्स" समाधान की तरह पाया
वास्तव में

@niconic यह उत्तर (केवल लिंक के रूप में बुरा होने के नाते) प्रकट संस्करण 2 के प्रभाव में आने से पहले की स्थिति को संदर्भित करता है। पहले, किसी को संसाधनों को वेब-सुलभ घोषित करने की आवश्यकता नहीं थी।
Xan

19

मुझे लगा कि मैं इस पर अपना शोध साझा करूंगा। मुझे यह पता लगाने में सक्षम होने की आवश्यकता है कि क्या किसी फ़ाइल के लिए एक विशिष्ट एक्सटेंशन स्थापित किया गया था: /// लिंक काम करने के लिए। मैं यहाँ इस लेख पर आया था इसने एक विस्तार के प्रकटन को प्राप्त करने की एक विधि बताई।

मैंने कोड को थोड़ा समायोजित किया और इसके साथ आया:

function Ext_Detect_NotInstalled(ExtName, ExtID) {
  console.log(ExtName + ' Not Installed');
  if (divAnnounce.innerHTML != '')
    divAnnounce.innerHTML = divAnnounce.innerHTML + "<BR>"

  divAnnounce.innerHTML = divAnnounce.innerHTML + 'Page needs ' + ExtName + ' Extension -- to intall the LocalLinks extension click <a href="https://chrome.google.com/webstore/detail/locallinks/' + ExtID + '">here</a>';
}

function Ext_Detect_Installed(ExtName, ExtID) {
  console.log(ExtName + ' Installed');
}

var Ext_Detect = function (ExtName, ExtID) {
  var s = document.createElement('script');
  s.onload = function () { Ext_Detect_Installed(ExtName, ExtID); };
  s.onerror = function () { Ext_Detect_NotInstalled(ExtName, ExtID); };
  s.src = 'chrome-extension://' + ExtID + '/manifest.json';
  document.body.appendChild(s);
}

var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;

if (is_chrome == true) {
  window.onload = function () { Ext_Detect('LocalLinks', 'jllpkdkcdjndhggodimiphkghogcpida'); };
}

इसके साथ ही आप किसी भी संख्या के एक्सटेंशन की स्थापना का पता लगाने के लिए Ext_Detect (ExtensionName, ExtensionID) का उपयोग करने में सक्षम होना चाहिए।


2
ऐसा लगता है कि Google की बनाई गई चीज़ें अधिक सुरक्षित हैं, जब मुझे Ext_Detect (): क्रोम-एक्सटेंशन का अस्वीकृत लोड: // [my_extension_id] /manifest.json
लाउंज

मैं इसे 2/27/2014 तक क्रोम के संस्करण 32.0.1700.107 मीटर के साथ काम करने में सक्षम हूं
जेई कार्टर II

1
जैसा कि @ लाउंज 9 ने कहा। Manifest_version 2 (या ऊपर) का उपयोग करते हुए संकुल के अंदर संसाधन कर रहे हैं डिफ़ॉल्ट रूप से अवरोधित है, और किया जाना चाहिए श्वेत सूची में manifest.json को जोड़कर इस संपत्ति के माध्यम से उपयोग के लिए: "web_accessible_resources": [ "manifest..json"],
एट-CS

@BJury उत्तर का उपयोग करके आप डेटा को विस्तार से स्क्रिप्ट में आसानी से पारित कर सकते हैं (उदाहरण के लिए एक्सटेंशन संस्करण) और आपको एक्सटेंशन से किसी भी फ़ाइल को उजागर करने की आवश्यकता नहीं है।
ET-CS

1
इसने मेरे लिए सबसे अच्छा काम किया क्योंकि हमारे एक्सटेंशन का उपयोग कई डोमेन में किया जाएगा और इसे पूर्व-परिभाषित नहीं किया जा सकता क्योंकि नए डोमेन नियमित रूप से जोड़े जाते हैं। मैनिफ़ेस्ट .json एक्सेस करने के बजाय मैंने एक नया फ़ाइल version.json बनाया और संस्करण संख्या को अंदर रखा। यह सिर्फ एक ही काम करता है।
पॉल हैगो

7

एक और संभावित समाधान यदि आप वेबसाइट के मालिक हैं तो इनलाइन इंस्टॉलेशन का उपयोग करें ।

if (chrome.app.isInstalled) {
  // extension is installed.
}

मैं यह एक पुराना प्रश्न जानता हूं, लेकिन यह तरीका क्रोम 15 में पेश किया गया था और इसलिए मैंने सोचा कि ईद सूची किसी के लिए भी अब केवल एक उत्तर की तलाश में है।


12
यह क्रोम ऐप के लिए बहुत अच्छा काम करता है , लेकिन
एरण मेडन

हां, वह वेबसाइट आपको बताती है कि इनलाइन एक एक्सटेंशन कैसे स्थापित करती है, लेकिन स्पष्ट रूप से यह अनुशंसा करती है कि "एक्सटेंशन एम्बेडिंग पेज के साथ सामग्री स्क्रिप्ट के माध्यम से संवाद कर सकते हैं ताकि यह पता चल सके कि वे पहले से स्थापित हैं।" इसके बजाय chrome.app.isInstalled का उपयोग करने में सक्षम होने के बजाय। मुझे भी भ्रमित कर दिया ...
rogerdpack


4

मैंने कुकी विधि का उपयोग किया:

मेरी मेनिफ़ेस्ट.जेएस फ़ाइल में मैंने एक सामग्री स्क्रिप्ट शामिल की जो केवल मेरी साइट पर चलती है:

 "content_scripts": [
        {
        "matches": [
            "*://*.mysite.co/*"
            ],
        "js": ["js/mysite.js"],
        "run_at": "document_idle"
        }
    ], 

मेरे js / mysite.js में मेरी एक पंक्ति है:

document.cookie = "extension_downloaded=True";

और अपने index.html पेज में मैं उस कुकी की तलाश करता हूं।

if (document.cookie.indexOf('extension_downloaded') != -1){
    document.getElementById('install-btn').style.display = 'none';
}

मैंने ऊपर दिए गए सभी समाधानों की कोशिश की, लेकिन काम नहीं कर रहा है, तो मैं आपका जवाब देखता हूं, यह वही है जो मैं देख रहा हूं!
जॉन डो

इसके बाद हर HTTP अनुरोध पर ओवरहेड जोड़ता है।
mlissner

3

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


5
एकमात्र समस्या यह है कि यदि कोई उपयोगकर्ता आपके एक्सटेंशन को हटा देता है। कुकी शायद सेट रहेगी।
चेस रॉबर्ट्स

3

इस Google समूह पोस्ट में एक और तरीका दिखाया गया है । संक्षेप में, आप यह पता लगाने की कोशिश कर सकते हैं कि एक्सटेंशन आइकन सफलतापूर्वक लोड होता है या नहीं। यदि आप जिस एक्सटेंशन की जांच कर रहे हैं वह आपके लिए नहीं है तो यह मददगार हो सकता है।


1
ठीक। अगर एक्सटेंशन आइकन मौजूद है तो हम कैसे जांचें?
माइकल रोजर्स

3

वेबपेज पृष्ठभूमि स्क्रिप्ट के माध्यम से विस्तार के साथ इंटरैक्ट करता है।

manifest.json:

"background": {
    "scripts": ["background.js"],
    "persistent": true
},
"externally_connectable": {
    "matches": ["*://(domain.ext)/*"]
},

background.js:
chrome.runtime.onMessageExternal.addListener(function(msg, sender, sendResponse) {
    if ((msg.action == "id") && (msg.value == id))
    {
        sendResponse({id : id});
    }
});

page.html:

<script>
var id = "some_ext_id";
chrome.runtime.sendMessage(id, {action: "id", value : id}, function(response) {
    if(response && (response.id == id)) //extension installed
    {
        console.log(response);
    }
    else //extension not installed
    {
        console.log("Please consider installig extension");
    }

});
</script>

फ़ायरफ़ॉक्स WebExtensions पर काम नहीं करता है, जहां बाहरी रूप से समर्थित नहीं है।
mlissner

3

आपका एक्सटेंशन वेबसाइट के साथ सहभागिता कर सकता है (जैसे परिवर्तनशील चर) और आपकी वेबसाइट यह पता लगा सकती है।

लेकिन ऐसा करने का एक बेहतर तरीका होना चाहिए। मुझे आश्चर्य है कि Google अपने एक्सटेंशन गैलरी पर यह कैसे कर रहा है (पहले से स्थापित एप्लिकेशन चिह्नित हैं)।

संपादित करें:

गैलरी chrome.management.get फ़ंक्शन का उपयोग करती है। उदाहरण:

chrome.management.get("mblbciejcodpealifnhfjbdlkedplodp", function(a){console.log(a);});

लेकिन आप केवल सही अनुमतियों वाले पृष्ठों से विधि तक पहुँच सकते हैं।


1
आपको हर टैब पर हर साइट के साथ बातचीत करने के लिए एक्सटेंशन की आवश्यकता होगी जो कि धीमी / कठिन होगी और इसे लागू करना मुश्किल होगा: - /

समस्या यह है कि क्रोम के सुरक्षा मॉडल की वजह से दूसरी दिशा (पृष्ठ विस्तार के लिए) में संचार संभव नहीं है। यदि आप 'इंटरएक्टिंग' तरीके से नहीं जाना चाहते हैं, तो कुकी रास्ता अपनाएं।
फॉक्स 32

2
प्रिय @ Fox32, chrome.management.get ..., इस त्रुटि को लौटाता है:Uncaught TypeError: Cannot read property 'get' of undefined
होसेन अकाजानी

3

अब तक यहां दिए गए बहुत सारे उत्तर केवल क्रोम हैं या HTTP ओवरहेड जुर्माना है। जो समाधान हम उपयोग कर रहे हैं वह थोड़ा अलग है:

1. प्रकट होने वाली content_scripts सूची में एक नई वस्तु जोड़ें जैसे:

{
  "matches": ["https://www.yoursite.com/*"],
  "js": [
    "install_notifier.js"
  ],
  "run_at": "document_idle"
}

यह उस साइट पर install_notifier.js में कोड को चलाने की अनुमति देगा (यदि आपके पास पहले से अनुमति नहीं थी)।

2. ऊपर दी गई मेनिफ़ेस्ट कुंजी में प्रत्येक साइट पर एक संदेश भेजें।

कुछ इस तरह से install_notifier.js जोड़ें (ध्यान दें कि यह वैरिएबल को वैश्विक रखने के लिए एक बंद का उपयोग कर रहा है, लेकिन यह कड़ाई से आवश्यक नहीं है):

// Dispatch a message to every URL that's in the manifest to say that the extension is
// installed.  This allows webpages to take action based on the presence of the
// extension and its version. This is only allowed for a small whitelist of
// domains defined in the manifest.
(function () {
  let currentVersion = chrome.runtime.getManifest().version;
  window.postMessage({
    sender: "my-extension",
    message_name: "version",
    message: currentVersion
  }, "*");
})();

आपका संदेश कुछ भी कह सकता है, लेकिन यह संस्करण भेजने के लिए उपयोगी है ताकि आप जान सकें कि आप किसके साथ काम कर रहे हैं। फिर...

3. अपनी वेबसाइट पर, उस संदेश के लिए सुनो।

इसे अपनी वेबसाइट में कहीं जोड़ें:

window.addEventListener("message", function (event) {
  if (event.source == window &&
    event.data.sender &&
    event.data.sender === "my-extension" &&
    event.data.message_name &&
    event.data.message_name === "version") {
    console.log("Got the message");
  }
});

यह फ़ायरफ़ॉक्स और क्रोम में काम करता है, और HTTP ओवरहेड को लाइक नहीं करता है या पेज में हेरफेर नहीं करता है।


0

यदि आपके पास Chrome एक्सटेंशन पर नियंत्रण है, तो आप कोशिश कर सकते हैं कि मैंने क्या किया:

// Inside Chrome extension
var div = document.createElement('div');
div.setAttribute('id', 'myapp-extension-installed-div');
document.getElementsByTagName('body')[0].appendChild(div);

और तब:

// On web page that needs to detect extension
if ($('#myapp-extension-installed-div').length) {

}

यह थोड़ा हैकरी लगता है, लेकिन मुझे काम करने के अन्य तरीके नहीं मिल सके, और मुझे चिंता है कि क्रोम यहां अपना एपीआई बदल रहा है। यह संदिग्ध है कि यह विधि जल्द ही किसी भी समय काम करना बंद कर देगी।


जैसा कि ऊपर बताया गया है- मैंने इसका परीक्षण किया था, लेकिन संचालन का क्रम अजीब लगता है- किस स्क्रिप्ट को पहले चलाया जाता है?
ब्रैडी मोरित्ज़

0

आप एक क्रॉस-ब्राउज़र विधि का भी उपयोग कर सकते हैं जो मैंने उपयोग किया है। एक div जोड़ने की अवधारणा का उपयोग करता है।

आपकी सामग्री स्क्रिप्ट में (जब भी स्क्रिप्ट लोड होती है, उसे ऐसा करना चाहिए)

if ((window.location.href).includes('*myurl/urlregex*')) {
        $('html').addClass('ifextension');
        }

अपनी वेबसाइट में आप कुछ इस तरह का दावा करते हैं,

if (!($('html').hasClass('ifextension')){}

और उचित संदेश फेंके।


मैंने इसका परीक्षण किया था, लेकिन संचालन का क्रम अजीब लगता है- किस स्क्रिप्ट को पहले चलाया जाता है?
ब्रैडी मोरिट्ज़

@ ब्रैडीमोरिट्ज ने उत्तर में जैसा आदेश दिया था। पहले कक्षा जोड़ें और फिर जोर दें।
प्रकाश पालनाटी

ऐसा लगता था कि मेरी सामग्री की स्क्रिप्ट मेरे इन-पेज स्क्रिप्ट से पहले नहीं चल रही थी?
ब्रैडी मोरिट्ज़

मुझे लगता है कि इसे ठीक करना आसान है। आप यह सुनिश्चित कर सकते हैं कि regex.have का उपयोग करके आवश्यक URL / मार्ग से टकराने के बाद आपकी सामग्री स्क्रिप्ट सही चलती है?
प्रकाश पालनाटी

0

यदि आप किसी भी वेबसाइट से किसी एक्सटेंशन का पता लगाने की कोशिश कर रहे हैं, तो इस पोस्ट ने मदद की: https://ide.hey.network/post/5c3b6c7aa7af38479accc0c7

मूल रूप से, समाधान केवल अपने पथ को निर्दिष्ट करके विस्तार से एक विशिष्ट फ़ाइल (मैनिफ़ेस्ट.जेसन या एक छवि) प्राप्त करने का प्रयास करना होगा। यहाँ मैं क्या इस्तेमाल किया है। निश्चित रूप से काम कर रहे:

const imgExists = function(_f, _cb) {
    const __i = new Image();
    __i.onload = function() {
        if (typeof _cb === 'function') {
            _cb(true);
        }
    }
    __i.onerror = function() {
        if (typeof _cb === 'function') {
            _cb(false);
        }
    }
    __i.src = _f;
    __i = null;
});

try {
    imgExists("chrome-extension://${CHROME_XT_ID}/xt_content/assets/logo.png", function(_test) {
        console.log(_test ? 'chrome extension installed !' : 'chrome extension not installed..');
        ifrm.xt_chrome = _test;
        // use that information
    });
} catch (e) {
    console.log('ERROR', e)
}

0

यहाँ एक अन्य आधुनिक दृष्टिकोण है:

const checkExtension = (id, src, callback) => {
    let e = new Image()
    e.src = 'chrome-extension://'+ id +'/'+ src
    e.onload = () => callback(1), e.onerror = () => callback(0)
}

// "src" must be included to "web_accessible_resources" in manifest.json
checkExtension('gighmmpiobklfepjocnamgkkbiglidom', 'icons/icon24.png', (ok) => {
    console.log('AdBlock: %s', ok ? 'installed' : 'not installed')
})
checkExtension('bhlhnicpbhignbdhedgjhgdocnmhomnp', 'images/checkmark-icon.png', (ok) => {
    console.log('ColorZilla: %s', ok ? 'installed' : 'not installed')
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.