Chrome Web Mağazası dışında barındırılan uzantılar yalnızca Linux kullanıcıları tarafından yüklenebilir. Bu makalede, kişisel 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ı'nda
Barındırma ve Güncelleme başlıklı makaleyi inceleyin.
Sunum
Uzantılar ve temalar .crx dosyaları olarak sunulur. Chrome Geliştirici Kontrol Paneli üzerinden yükleme yaparken kontrol paneli , .crx dosyasını otomatik olarak oluşturur. Kişisel bir sunucuda yayınlanıyorsa .crx dosyasının yerel olarak oluşturulması veya Chrome Web Mağazası'ndan indirilmesi gerekir.
Chrome Web Mağazası'ndan .crx dosyasını indirme
Chrome Web Mağazası'nda barındırılan uzantıların .crx dosyası, Geliştirici Kontrol Paneli'nden indirilebilir. "Girişleriniz" bölümünde uzantıyı bulun ve "Daha fazla bilgi"yi tıklayın. Pop-up pencerede, indirmek için mavi main.crx bağlantıyı 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, bu yöntem uzantıyı yerel olarak barındırmanın en güvenli yoludur. Bu sayede olası saldırılar ve kurcalamalar tespit edilebilir.
.crx dosyasını yerel olarak oluşturma
Uzantı dizinleri, Uzantı Yönetimi Sayfası'nda .crx dosyalarına dönüştürülür. Ominibox'ta chrome://extensions/ simgesine gidin veya Chrome menüsünü tıklayıp "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 modunu etkinleştirin. Ardından PAKETLEME UZANTISI düğmesini seçin.

Uzantının klasörünün yolunu Uzantı kök dizini alanında belirtin ve PACK EXTENSION (Uzantıyı paketle) düğmesini tıklayın. İlk kez oluşturulan bir paket için Özel anahtar alanını yoksayın.

Chrome, uzantının özel anahtarını içeren bir .crx dosyası ve bir .pem dosyası olmak üzere iki dosya oluşturur.

Özel anahtarı kaybetmeyin. .pem dosyasını gizli ve güvenli bir yerde saklayın. Uzantıyı güncellemek için bu dosyaya ihtiyacınız olacak.
.crx paketini güncelleme
.crx dosyasındaki sürüm numarasını manifest.json içinde 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ılar dizininin yolunu ve özel anahtarın konumunu belirtin.

Sayfada, güncellenen paketlenmiş uzantının yolu gösterilir.

Komut satırı üzerinden paketleme
chrome.exe komutunu ç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 bir sunucu, kullanıcıların bir bağlantıyı tıklayarak uzantıyı yüklemesine izin vermek için uygun HTTP başlıklarını kullanmalıdır.
Google Chrome, aşağıdaki iki koşuldan biri geçerliyse dosyayı yüklenebilir olarak kabul eder:
- Dosyanın içerik türü
application/x-chrome-extension - Dosya soneki
.crxve aşağıdakilerin ikisi de doğrudur:- Dosya,
X-Content-Type-Options: nosniffHTTP üst bilgisiyle sunulmuyor. - Dosya, aşağıdaki içerik türlerinden biriyle sunulur:
- boş dize
- "text/plain"
- "application/octet-stream"
- "unknown/unknown"
- "application/unknown"
- "*/*"
- Dosya,
Yüklenebilir bir dosyanın tanınamamasının en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff üstbilgisini göndermesidir. En yaygın ikinci neden, sunucunun bilinmeyen bir içerik türü (önceki listede yer almayan bir tür) göndermesidir. 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ı, birkaç saatte bir yüklü uzantıların güncelleme URL'sini kontrol eder. Her biri için, güncelleme manifesti XML dosyası arayarak ilgili URL'ye istek gönderir.
- Güncelleme kontrolü tarafından döndürülen içerik, bir uzantının en son sürümünü listeleyen bir güncelleme manifesti XML belgesidir.
Güncelleme manifestinde, yüklü sürümden daha yeni bir sürüm belirtiliyorsa tarayıcı yeni sürümü indirip yükler. Manuel güncellemelerde olduğu gibi, yeni .crx dosyası da şu anda yüklü olan 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ında update_url alanını içermelidir.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Manifest dosyasını güncelleme
Sunucu tarafından döndürülen güncelleme manifesti bir XML belgesi 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ı olan Omaha tarafından kullanılan biçimden alınmıştır. Uzantılar sistemi, güncelleme manifest dosyasının <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 oluşturma işlemine göre oluşturulur. Uzantı kimliği, Uzantı Yönetimi Sayfası'nda gösterilir. |
| kod tabanı | .crx dosyasına ait bir HTTPS URL'si. |
| sürüm | İstemci tarafından, codebase ile belirtilen .crx dosyasını indirip indirmemesi gerektiğini belirlemek için kullanılır. Bu değer, .crx dosyasının manifest.json dosyasındaki "version" değerine karşılık gelmelidir. |
Güncelleme manifesti XML dosyası, birden fazla <app> öğesi içerecek şekilde birden fazla 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üncelleme zorlanabilir.

Bu işlem, yüklü tüm uzantılar için kontrolleri başlatır.
Gelişmiş kullanım: istek parametreleri
Temel otomatik güncelleme mekanizması, sunucu tarafı çalışmasını Apache gibi herhangi bir düz web sunucusuna statik bir XML dosyası bırakmak ve yeni uzantı sürümleri yayınlandıkça bu XML dosyasını 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ı kodu çalıştıran aynı URL'den güncellenmesine olanak tanır.
İstek parametrelerinin biçimi şöyledir:
?x=EXTENSION_DATA
Burada EXTENSION_DATA, şu biçimde URL olarak kodlanmış bir dizedir:
id=EXTENSION\_ID&v=EXTENSION\_VERSION
Örneğin, iki uzantı aynı güncelleme URL'sini (https://test.com/extension_updates.php) işaret ediyor:
- Uzantı 1
- Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Sürüm: "1.1"
- Uzantı 2
- Kimlik: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Sürüm: "0.4"
Her bir uzantıyı güncelleme isteği şu şekilde 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ının her iki uzantısı da 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ı, GET isteği URL'sinin çok uzun olmasına (2.000'den fazla karakter) neden olacak kadar fazlaysa güncelleme kontrolü gerektiğinde ek GET istekleri gönderir.
Gelişmiş kullanım: minimum tarayıcı sürümü
Uzantı sistemine daha fazla API eklendikçe, yalnızca tarayıcının yeni sürümleriyle çalışacak bir uzantının güncellenmiş sürümü yayınlanabilir. Google Chrome otomatik olarak güncellenir ancak kullanıcı tabanının büyük bir kısmının belirli bir yeni sürüme güncellenmesi birkaç gün sürebilir. Belirli bir güncellemenin yalnızca belirli bir sürümdeki veya daha yeni Google Chrome sürümlerine uygulanmasını sağlamak 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 sayede kullanıcılar yalnızca Google Chrome 3.0.193.0 veya daha yeni bir sürümü kullanıyorlarsa otomatik olarak 2. sürüme güncellenir.