อีกวิธีหนึ่งคือการเปิดเผยแหล่งข้อมูลที่สามารถเข้าถึงได้บนเว็บแม้ว่าวิธีนี้จะช่วยให้เว็บไซต์ใด ๆ ทดสอบว่ามีการติดตั้งส่วนขยายของคุณหรือไม่
สมมติว่า ID ส่วนขยายของคุณคือaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
และคุณเพิ่มไฟล์ (เช่นภาพพิกเซลโปร่งใส) เช่นเดียวกับtest.png
ในไฟล์ของส่วนขยายของคุณ
จากนั้นคุณแสดงไฟล์นี้ในหน้าเว็บด้วยweb_accessible_resources
manifest key:
"web_accessible_resources": [
"test.png"
],
ในหน้าเว็บของคุณคุณสามารถลองโหลดไฟล์นี้โดยใช้ URL แบบเต็ม (ใน<img>
แท็กผ่าน XHR หรือด้วยวิธีอื่นใด):
chrome-extension:
หากไฟล์โหลดแสดงว่ามีการติดตั้งส่วนขยาย หากเกิดข้อผิดพลาดขณะโหลดไฟล์แสดงว่าไม่ได้ติดตั้งส่วนขยายนี้
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 ใช้วิธีนี้มันทำให้เกิดการโต้เถียงกันเล็กน้อยเพราะเหตุนี้ ด้วยวิธีการแก้ปัญหาที่น่าเกลียดมากในการขึ้นบัญชีดำข้อผิดพลาดที่เฉพาะเจาะจงมากจาก Dev Tools โดยทีม Chrome
หมายเหตุสำคัญ:วิธีนี้จะใช้ไม่ได้ใน Firefox WebExtensions ทรัพยากรที่สามารถเข้าถึงได้บนเว็บจะเปิดเผยส่วนขยายให้กับการพิมพ์ลายนิ้วมือเนื่องจาก URL สามารถคาดเดาได้โดยการรู้ ID Firefox ตัดสินใจปิดช่องนั้นโดยกำหนด URL แบบสุ่มเฉพาะอินสแตนซ์ให้กับทรัพยากรที่สามารถเข้าถึงได้บนเว็บ:
จากนั้นไฟล์จะพร้อมใช้งานโดยใช้ URL เช่น:
moz-extension://<random-UUID>/<path/to/resource>
UUID นี้สร้างขึ้นแบบสุ่มสำหรับทุกอินสแตนซ์ของเบราว์เซอร์และไม่ใช่ ID ของส่วนขยายของคุณ วิธีนี้ป้องกันไม่ให้เว็บไซต์พิมพ์ลายนิ้วมือส่วนขยายที่ผู้ใช้ติดตั้งไว้
อย่างไรก็ตามในขณะที่ส่วนขยายสามารถใช้runtime.getURL()
เพื่อรับที่อยู่นี้คุณไม่สามารถฮาร์ดโค้ดในเว็บไซต์ของคุณได้