Metode lain adalah mengekspos sumber daya yang dapat diakses web , meskipun ini akan memungkinkan situs web apa pun untuk menguji apakah ekstensi Anda dipasang.
Misalkan ID ekstensi Anda adalah aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
, dan Anda menambahkan file (katakanlah, gambar piksel transparan) seperti test.png
pada file ekstensi Anda.
Kemudian, Anda mengekspos file ini ke halaman web dengan web_accessible_resources
kunci manifes:
"web_accessible_resources": [
"test.png"
],
Di halaman web Anda, Anda dapat mencoba memuat file ini dengan URL lengkapnya (dalam <img>
tag, melalui XHR, atau dengan cara lain):
chrome-extension://aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/test.png
Jika file dimuat, ekstensi diinstal. Jika ada kesalahan saat memuat file ini, ekstensi belum terpasang.
// 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);
};
}
Catatan: jika ada kesalahan saat memuat file ini, kesalahan tumpukan jaringan tersebut akan muncul di konsol tanpa kemungkinan untuk membungkamnya. Ketika Chromecast menggunakan metode ini, itu menyebabkan sedikit kontroversi karena ini; dengan solusi yang sangat buruk yaitu memasukkan kesalahan yang sangat spesifik dari Dev Tools ke daftar hitam sekaligus oleh tim Chrome.
Catatan penting: metode ini tidak akan berfungsi di Firefox WebExtensions. Sumber daya yang dapat diakses web secara inheren mengekspos ekstensi ke sidik jari, karena URL dapat diprediksi dengan mengetahui ID-nya. Firefox memutuskan untuk menutup lubang itu dengan menetapkan URL acak khusus instance ke sumber daya yang dapat diakses web:
File-file tersebut kemudian akan tersedia menggunakan URL seperti:
moz-extension://<random-UUID>/<path/to/resource>
UUID ini dibuat secara acak untuk setiap browser dan bukan ID ekstensi Anda. Ini mencegah situs web mengambil sidik jari dari ekstensi yang telah dipasang pengguna.
Namun, meskipun ekstensi dapat digunakan runtime.getURL()
untuk mendapatkan alamat ini, Anda tidak dapat melakukan hard-code di situs Anda.