Ekstensi yang dihosting di luar Chrome Web Store hanya dapat diinstal oleh pengguna Linux. Artikel
ini menjelaskan cara memaketkan, menghosting, dan mengupdate file .crx
dari server pribadi. Jika
mendistribusikan ekstensi atau tema hanya melalui Chrome Web Store, baca Hosting
dan Memperbarui Webstore.
Kemasan
Ekstensi dan tema ditayangkan sebagai file .crx
. Saat mengupload melalui Dasbor Developer
Chrome , dasbor akan membuat file .crx
secara otomatis. Jika dipublikasikan di server
pribadi, file .crx
harus dibuat secara lokal atau didownload dari Chrome Web Store.
Download file .crx dari Chrome Web Store
Jika ekstensi dihosting di Chrome Web Store, file .crx
dapat didownload dari
Dasbor Developer. Temukan ekstensi di bagian "Listingan Anda" dan klik "Info selengkapnya". Di
jendela pop-up, klik link main.crx
biru untuk mendownloadnya.
File yang didownload dapat dihosting di server pribadi. Ini adalah cara paling aman untuk menghosting ekstensi secara lokal karena konten ekstensi akan ditandatangani oleh Chrome Web Store. Hal ini membantu mendeteksi potensi serangan dan gangguan.
Membuat .crx secara lokal
Direktori ekstensi dikonversi menjadi file .crx
di Halaman Pengelolaan Ekstensi. Buka
chrome://extensions/
di ominibox, atau klik menu Chrome, arahkan kursor ke "Alat Lainnya", lalu
pilih "Ekstensi".
Di Halaman Pengelolaan Ekstensi, aktifkan Mode Developer dengan mengklik tombol di samping Mode developer. Kemudian pilih tombol EKSTENSI KEMASAN.
Tentukan jalur ke folder ekstensi di kolom direktori utama Ekstensi, lalu klik tombol EKSTENSI KEMASAN. Abaikan kolom Kunci pribadi untuk paket pertama kali.
Chrome akan membuat dua file, file .crx
dan file .pem
, yang berisi kunci pribadi ekstensi.
Jangan kehilangan kunci pribadi. Simpan file .pem
di tempat yang rahasia dan aman; file tersebut akan diperlukan untuk mengupdate ekstensi.
Memperbarui paket .crx
Update file .crx
ekstensi dengan meningkatkan nomor versi di manifest.json
.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Kembali ke Halaman Pengelolaan Ekstensi dan klik tombol EKSTENSI KEMASAN. Tentukan jalur ke direktori ekstensi dan lokasi kunci pribadi.
Halaman ini akan menyediakan jalur untuk ekstensi paket yang diupdate.
Paket melalui command line
Kemas ekstensi di command line dengan memanggil chrome.exe
. Gunakan flag --pack-extension
untuk menentukan lokasi folder ekstensi dan tanda --pack-extension-key
untuk menentukan lokasi file kunci pribadi ekstensi.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Hosting
Server yang menghosting file .crx
harus menggunakan header HTTP yang sesuai agar pengguna dapat menginstal ekstensi dengan mengklik link.
Google Chrome menganggap file dapat diinstal jika salah satu kondisi berikut terpenuhi:
- File memiliki jenis konten
application/x-chrome-extension
- Akhiran file adalah
.crx
dan kedua hal berikut berlaku:- File tidak ditayangkan dengan header HTTP
X-Content-Type-Options: nosniff
- File ditayangkan dengan salah satu jenis konten berikut:
- string kosong
- "text/plain"
- "application/octet-stream"
- "tidak diketahui/tidak diketahui"
- "aplikasi/tidak diketahui"
- "*/*"
- File tidak ditayangkan dengan header HTTP
Alasan paling umum kegagalan mengenali file yang dapat diinstal adalah karena server mengirimkan header X-Content-Type-Options: nosniff
. Alasan paling umum kedua adalah server mengirimkan
jenis konten yang tidak diketahui—jenis konten yang tidak ada dalam daftar sebelumnya. Untuk memperbaiki masalah header HTTP, ubah konfigurasi server atau coba hosting file .crx
di server lain.
Mengupdate
Setiap beberapa jam, browser memeriksa URL update di ekstensi yang diinstal. Untuk masing-masingnya, metode ini membuat permintaan ke URL tersebut untuk mencari file XML manifes update.
- Konten yang ditampilkan oleh pemeriksaan update adalah dokumen XML manifes update yang mencantumkan versi terbaru suatu ekstensi.
Jika manifes update menyebutkan versi yang lebih baru daripada yang diinstal, browser
akan mendownload dan menginstal versi baru. Seperti update manual, file .crx
baru harus ditandatangani
dengan kunci pribadi yang sama dengan versi yang terinstal saat ini.
URL pembaruan
Ekstensi yang dihosting di server di luar Chrome Web Store harus menyertakan kolom update_url
dalam
file manifest.json
.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Mengupdate manifes
Manifes update yang ditampilkan oleh server harus berupa dokumen XML.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Format XML ini dipinjam dari yang digunakan oleh Omaha, yaitu infrastruktur pembaruan Google. Sistem
ekstensi menggunakan atribut berikut untuk elemen <app>
dan <updatecheck>
di
manifes update:
appid | ID ekstensi dibuat berdasarkan hash kunci publik, sebagaimana dijelaskan dalam kemasan. ID ekstensi ditampilkan di Halaman Pengelolaan Ekstensi |
codebase | URL HTTPS ke file .crx . |
versi | Digunakan oleh klien untuk menentukan apakah harus mendownload file .crx yang ditentukan oleh codebase . Nilai ini harus cocok dengan nilai "version" di file manifest.json file .crx . |
File XML manifes update dapat berisi informasi tentang beberapa ekstensi dengan menyertakan beberapa elemen <app>.
Pengujian
Frekuensi pemeriksaan update default adalah beberapa jam, tetapi update dapat dipaksa menggunakan tombol Update ekstensi sekarang di Halaman Pengelolaan Ekstensi.
Tindakan ini akan memulai pemeriksaan untuk semua ekstensi yang terinstal.
Penggunaan lanjutan: parameter permintaan
Mekanisme update otomatis dasar dirancang untuk membuat sisi server berfungsi semudah melepas file XML statis ke server web biasa, seperti Apache, dan memperbarui file XML tersebut saat versi ekstensi baru dirilis.
Developer yang menghosting beberapa ekstensi dapat memeriksa parameter permintaan, yang menunjukkan ID dan versi ekstensi dalam permintaan update. Dengan menyertakan parameter ini, ekstensi dapat diupdate dari URL yang sama yang menjalankan kode sisi server dinamis, bukan file XML statis.
Format parameter permintaan adalah:
?x=EXTENSION_DATA
Dengan EXTENSION_DATA
adalah string format yang dienkode URL:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Misalnya, dua ekstensi mengarah ke URL update yang sama (https://test.com/extension_updates.php
):
- Ekstensi 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versi: "1.1"
- Ekstensi 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versi: "0.4"
Permintaan untuk memperbarui setiap ekstensi individu adalah,
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
dan
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Beberapa ekstensi dapat dicantumkan dalam satu permintaan untuk setiap URL update yang unik. Untuk contoh di atas, jika pengguna menginstal kedua ekstensi, kedua permintaan tersebut akan digabungkan menjadi satu permintaan:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Jika jumlah ekstensi terinstal yang menggunakan URL update yang sama cukup besar sehingga URL permintaan GET terlalu panjang (lebih dari 2.000 karakter), pemeriksaan update akan mengeluarkan permintaan GET tambahan sesuai kebutuhan.
Penggunaan lanjutan: versi browser minimum
Seiring semakin banyak API yang ditambahkan ke sistem ekstensi, versi ekstensi terupdate yang hanya berfungsi dengan versi browser yang lebih baru mungkin akan dirilis. Meskipun Google Chrome sendiri diupdate secara otomatis,
perlu waktu beberapa hari sebelum sebagian besar basis pengguna diupdate ke rilis baru tertentu. Untuk
memastikan update yang diberikan hanya akan berlaku untuk versi Google Chrome pada atau lebih tinggi dari versi
tertentu, tambahkan atribut "prodversionmin" ke elemen
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
Hal ini akan memastikan bahwa pengguna akan mengupdate otomatis ke versi 2 hanya jika mereka menjalankan Google Chrome 3.0.193.0 atau yang lebih baru.