एक अन्य तरीका वेब-सुलभ संसाधन को उजागर करना है , हालांकि यह किसी भी वेबसाइट को यह जांचने की अनुमति देगा कि क्या आपका एक्सटेंशन स्थापित है।
मान लीजिए कि आपके एक्सटेंशन की आईडी है 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()
इस पते को प्राप्त करने के लिए उपयोग कर सकता है, तो आप इसे अपनी वेबसाइट में हार्ड-कोड नहीं कर सकते।