Ekstensi yang dihosting di luar Chrome Web Store hanya dapat diinstal oleh pengguna Linux. Artikel ini menjelaskan cara mengemas, menghosting, dan memperbarui file .crx dari server pribadi. Jika
mendistribusikan ekstensi atau tema hanya melalui Chrome Web Store, lihat Hosting dan Pembaruan Web Store.
Pengemasan
Ekstensi dan tema ditayangkan sebagai file .crx. Saat diupload 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.
Mendownload .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 berwarna 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 kotak URL, atau klik menu Chrome, arahkan kursor ke "Alat Lainnya", lalu pilih "Ekstensi".
Di Halaman Pengelolaan Ekstensi, aktifkan Mode Developer dengan mengklik tombol pengalih di samping Mode developer. Kemudian, pilih tombol KEMAS EKSTENSI.

Tentukan jalur ke folder ekstensi di kolom Direktori root ekstensi, lalu klik tombol KEMAS EKSTENSI. Abaikan kolom Kunci pribadi untuk paket pertama kali.

Chrome akan membuat dua file, file .crx dan file .pem, yang berisi kunci pribadi ekstensi.

Jangan sampai kehilangan kunci pribadi! Simpan file .pem di tempat yang rahasia dan aman; file ini akan
diperlukan untuk memperbarui ekstensi.
Memperbarui paket .crx
Perbarui file .crx ekstensi dengan meningkatkan nomor versi di manifest.json.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Kembali ke Halaman Pengelolaan Ekstensi dan klik tombol KEMAS EKSTENSI. Tentukan jalur ke direktori ekstensi dan lokasi kunci pribadi.

Halaman akan memberikan jalur untuk ekstensi paket yang diperbarui.

Mengemas melalui command line
Kemasi ekstensi di command line dengan memanggil chrome.exe. Gunakan --pack-extension
flag untuk menentukan lokasi folder ekstensi dan flag --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 hal berikut benar:
- File memiliki jenis konten
application/x-chrome-extension - Sufiks file adalah
.crxdan kedua hal berikut benar:- 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"
- "unknown/unknown"
- "application/unknown"
- "*/*"
- File tidak ditayangkan dengan header HTTP
Alasan paling umum kegagalan mengenali file yang dapat diinstal adalah karena server mengirim header X-Content-Type-Options: nosniff. Alasan kedua yang paling umum adalah server mengirim 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.
Memperbarui
Setiap beberapa jam, browser akan memeriksa ekstensi yang diinstal untuk mengetahui URL update. Untuk setiap ekstensi, browser akan 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 ekstensi.
Jika manifes update menyebutkan versi yang lebih baru dari versi yang diinstal, browser akan mendownload dan menginstal versi baru. Seperti halnya update manual, file .crx baru harus ditandatangani dengan kunci pribadi yang sama dengan versi yang saat ini diinstal.
URL update
Ekstensi yang dihosting di server di luar Chrome Web Store harus menyertakan kolom update_url di
file manifest.json mereka.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Manifes update
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 format yang digunakan oleh Omaha, infrastruktur update Google. Sistem ekstensi menggunakan atribut berikut untuk elemen <app> dan <updatecheck> dari manifes update:
| appid | ID ekstensi dibuat berdasarkan hash kunci publik, seperti yang dijelaskan dalam pengemasan. ID ekstensi ditampilkan di Halaman Pengelolaan Ekstensi |
| codebase | URL HTTPS ke file .crx. |
| version | Digunakan oleh klien untuk menentukan apakah klien harus mendownload file .crx yang ditentukan oleh codebase. Nilai ini harus cocok dengan nilai "version" dalam 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 dipaksakan menggunakan tombol Perbarui ekstensi sekarang di Halaman Pengelolaan Ekstensi.

Tindakan ini akan memulai pemeriksaan untuk semua ekstensi yang diinstal.
Penggunaan lanjutan: parameter permintaan
Mekanisme update otomatis dasar dirancang untuk membuat pekerjaan sisi server semudah menjatuhkan 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 yang dienkode URL dengan format:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Misalnya, dua ekstensi mengarah ke URL update yang sama (https://test.com/extension_updates.php):
- Ekstensi 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versi: "1.1"
- Ekstensi 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versi: "0.4"
Permintaan untuk memperbarui setiap ekstensi akan menjadi,
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 unik. Untuk contoh di atas, jika pengguna menginstal kedua ekstensi tersebut, kedua permintaan 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 yang diinstal menggunakan URL update yang sama cukup besar sehingga URL permintaan GET terlalu panjang (sekitar 2.000 karakter atau lebih), pemeriksaan update akan mengeluarkan permintaan GET tambahan sesuai kebutuhan.
Penggunaan lanjutan: versi browser minimum
Saat lebih banyak API ditambahkan ke sistem ekstensi, versi ekstensi yang diupdate yang hanya akan berfungsi dengan versi browser yang lebih baru dapat dirilis. Meskipun Google Chrome itu sendiri diupdate secara otomatis, mungkin perlu waktu beberapa hari sebelum sebagian besar basis pengguna diupdate ke rilis baru tertentu. Untuk
memastikan bahwa update tertentu hanya akan diterapkan ke versi Google Chrome yang sama 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 diupdate secara otomatis ke versi 2 hanya jika mereka menjalankan Google Chrome 3.0.193.0 atau yang lebih baru.