Chrome Web Mağazası'nın dışında barındırılan uzantılar yalnızca Linux kullanıcıları tarafından yüklenebilir. Bu makalede, kişisel bir sunucudaki .crx
dosyalarının nasıl paketleneceği, barındırılacağı ve güncelleneceği açıklanmaktadır. Bir uzantıyı veya temayı yalnızca Chrome Web Mağazası üzerinden dağıtıyorsanız Web Mağazası Barındırma ve Güncelleme konusuna bakın.
Sunum
Uzantılar ve temalar .crx
dosyası olarak sunulur. Chrome Geliştirici Kontrol Paneli üzerinden yükleme yapılırken kontrol paneli .crx
dosyasını otomatik olarak oluşturur. Kişisel bir sunucuda yayınlanırsa .crx
dosyasının yerel olarak oluşturulması veya Chrome Web Mağazası'ndan indirilmesi gerekir.
Chrome Web Mağazası'ndan .crx dosyasını indirin
Bir uzantı Chrome Web Mağazası'nda barındırılıyorsa .crx
dosyası Geliştirici Kontrol Paneli'nden indirilebilir. "Girişleriniz" bölümünün altında uzantıyı bulun ve "Daha fazla bilgi"yi tıklayın. İndirmek için pop-up pencerede mavi main.crx
bağlantısını tıklayın.
İndirilen dosya kişisel bir sunucuda barındırılabilir. Uzantının içeriği Chrome Web Mağazası tarafından imzalanacağından, bir uzantıyı yerel olarak barındırmanın en güvenli yoludur. Bu, olası saldırıların ve izinsiz değişikliklerin tespit edilmesine yardımcı olur.
Yerel olarak .crx dosyası oluşturma
Uzantı dizinleri, Uzantı Yönetim Sayfası'nda .crx
dosyaya dönüştürülür. Çok amaçlı adres çubuğunda chrome://extensions/
adresine gidin veya Chrome menüsünü tıklayıp fareyle "Diğer Araçlar"ın üzerine gelin ve "Uzantılar"ı seçin.
Uzantı Yönetimi sayfasında, Geliştirici modu'nun yanındaki açma/kapatma düğmesini tıklayarak Geliştirici Modu'nu etkinleştirin. Ardından PAKET UZANTI düğmesini seçin.
Uzantı kök dizini alanında uzantı klasörünün yolunu belirtin ve ardından UZANTI UZANTI düğmesini tıklayın. İlk pakette Özel anahtar alanını yoksayın.
Chrome, bir .crx
dosyası ve bir de uzantının özel anahtarını içeren .pem
dosyası olmak üzere iki dosya oluşturur.
Özel anahtarı kaybetmeyin. .pem
dosyasını gizli ve güvenli bir yerde tutun; uzantının güncellemesi gerekir.
.crx paketini güncelleme
manifest.json
üzerindeki sürüm numarasını artırarak bir uzantının .crx
dosyasını güncelleyin.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Uzantı Yönetimi Sayfası'na dönün ve PAKET UZANTISI düğmesini tıklayın. Uzantı dizininin yolunu ve özel anahtarın konumunu belirtin.
Sayfa, güncellenen paket uzantısının yolunu sağlar.
Komut satırıyla paketleme
chrome.exe
yöntemini çağırarak uzantıları komut satırında paketleyin. Uzantı klasörünün konumunu belirtmek için --pack-extension
işaretini, uzantının özel anahtar dosyasının konumunu belirtmek için --pack-extension-key
işaretini kullanın.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Barındırma
.crx
dosyalarını barındıran sunucu, kullanıcıların bir bağlantıyı tıklayarak uzantıyı yüklemesine izin vermek için uygun HTTP üst bilgilerini kullanmalıdır.
Google Chrome, aşağıdakilerden biri sağlandığında bir dosyayı yüklenebilir olarak kabul eder:
- Dosyanın içerik türü:
application/x-chrome-extension
- Dosya son eki
.crx
ve aşağıdakilerin her ikisi de doğrudur:- Dosya
X-Content-Type-Options: nosniff
HTTP başlığıyla yayınlanmıyor - Dosya aşağıdaki içerik türlerinden biriyle yayınlanır:
- boş dize
- "text/plain"
- "application/octet-stream"
- "bilinmiyor/bilinmiyor"
- "uygulama/bilinmiyor"
- "*/*"
- Dosya
Yüklenebilir bir dosyanın tanınmamasının en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff
üst bilgisini göndermesidir. İkinci en yaygın neden, sunucunun bilinmeyen bir içerik türü göndermesidir. Bu tür, bir önceki listede yer almaz. HTTP üst bilgisi sorununu düzeltmek için sunucunun yapılandırmasını değiştirin veya .crx
dosyasını başka bir sunucuda barındırmayı deneyin.
Güncelleniyor
Tarayıcı, yüklü uzantılarda güncelleme URL'si olup olmadığını birkaç saatte bir kontrol eder. Her biri için bir güncelleme manifest XML dosyası aramak için bu URL'ye bir istekte bulunur.
- Güncelleme kontrolünün döndürdüğü içerik, bir uzantının en son sürümünü listeleyen bir güncelleme manifesti XML dokümanıdır.
Güncelleme manifestinde yüklü olandan daha yeni bir sürümden bahsediliyorsa tarayıcı yeni sürümü indirip yükler. Manuel güncellemelerde olduğu gibi yeni .crx
dosyası şu anda yüklü sürümle aynı özel anahtarla imzalanmalıdır.
Güncelleme URL'si
Chrome Web Mağazası dışındaki sunucularda barındırılan uzantılar, manifest.json
dosyalarına update_url
alanını içermelidir.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Manifesti güncelle
Sunucu tarafından döndürülen güncelleme manifesti bir XML dokümanı olmalıdır.
<?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>
Bu XML biçimi, Google'ın güncelleme altyapısı Omaha tarafından kullanılandan ödünç alınmıştır. Uzantı sistemi, güncelleme manifestinin <app>
ve <updatecheck>
öğeleri için aşağıdaki özellikleri kullanır:
appid | Uzantı kimliği, paketleme bölümünde açıklandığı gibi ortak anahtarın karma değerine göre oluşturulur. Uzantının kimliği, Uzantı Yönetimi Sayfası'nda gösterilir |
kod tabanı | .crx dosyasının HTTPS URL'si. |
sürüm | codebase tarafından belirtilen .crx dosyasını indirip indirmeyeceğini belirlemek için istemci tarafından kullanılır. .crx dosyasının manifest.json dosyasındaki "version" değeriyle eşleşmelidir. |
Güncelleme manifesti XML dosyası, birden fazla <app> öğesi ekleyerek birden çok uzantı hakkında bilgi içerebilir.
Test
Varsayılan güncelleme kontrolü sıklığı birkaç saattir ancak Uzantı Yönetimi sayfasındaki Uzantıları şimdi güncelle düğmesi kullanılarak güncellemenin zorunlu kılınması mümkündür.
Bu işlem, yüklü tüm uzantıların kontrollerini başlatır.
Gelişmiş kullanım: istek parametreleri
Temel otomatik güncelleme mekanizması, sunucu tarafının çalışmasını, statik bir XML dosyasını Apache gibi herhangi bir düz web sunucusuna bırakmak ve yeni uzantı sürümleri yayınlandıkça güncellemek kadar kolay hale getirmek için tasarlanmıştır.
Birden fazla uzantı barındıran geliştiriciler, güncelleme isteğindeki uzantı kimliğini ve sürümünü belirten istek parametrelerini kontrol edebilir. Bu parametrelerin eklenmesi, uzantıların statik bir XML dosyası yerine dinamik sunucu tarafı kod çalıştıran aynı URL'den güncellenmesine olanak tanır.
İstek parametrelerinin biçimi şu şekildedir:
?x=EXTENSION_DATA
Burada EXTENSION_DATA
, URL kodlamalı şu biçimde bir dizedir:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Örneğin, iki uzantı aynı güncelleme URL'sine (https://test.com/extension_updates.php
) yönlendiriyor:
- Uzantı 1
- Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Sürüm: "1.1"
- Uzantı 2
- Kimlik: "bbbbbbbbbbbbbbbbbbbbbb}bbbbilgili"
- Sürüm: "0.4"
Her bir uzantıyı tek tek güncelleme isteği şöyle olur:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
ve
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Her benzersiz güncelleme URL'si için tek bir istekte birden fazla uzantı listelenebilir. Yukarıdaki örnekte, bir kullanıcıda uzantıların her ikisi de yüklüyse iki istek tek bir istekte birleştirilir:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Aynı güncelleme URL'sini kullanan yüklü uzantıların sayısı bir GET isteği URL'sinin çok uzun olmasına (2000'den fazla karakter) yetecek kadar büyükse güncelleme kontrolü, gerektiği şekilde ek GET istekleri gönderir.
Gelişmiş kullanım: minimum tarayıcı sürümü
Uzantı sistemine daha fazla API eklendikçe, bir uzantının yalnızca
tarayıcının yeni sürümleriyle çalışacak güncellenmiş bir sürümü yayınlanabilir. Google Chrome otomatik olarak güncellense de, kullanıcı tabanının
büyük çoğunluğunun yeni bir sürüme güncellenmesi birkaç gün sürebilir. Belirli bir güncellemenin yalnızca belirli bir sürümdeki veya daha sonraki Google Chrome sürümlerine uygulandığından emin olmak için güncelleme yanıtındaki
<?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>
Bu şekilde, kullanıcılar yalnızca Google Chrome 3.0.193.0 veya sonraki bir sürümü kullanıyorsa sürüm 2'ye otomatik olarak güncelleme yapar.