Linux, Chrome kullanıcılarının Chrome Web Mağazası'nın dışında barındırılan uzantıları yükleyebileceği tek platformdur. Bu makalede genel amaçlı bir web sunucusundan crx
dosyalarının nasıl paketleneceği, barındırılacağı ve güncelleneceği açıklanmaktadır. Bir uzantıyı veya temayı sadece Chrome Web Mağazası aracılığıyla dağıtıyorsanız Web mağazası barındırma ve güncelleme konusuna bakın.
Paket
Uzantılar ve temalar .crx
dosyası 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ı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" 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. Bu, bir uzantıyı yerel olarak barındırmanın en güvenli yoludur, çünkü uzantının içeriği Chrome Web Mağazası tarafından imzalanır. 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
dosyasına dönüştürülür. Çok amaçlı adres çubuğunda chrome://extensions/
adresine gidin veya Chrome menüsünü tıklayın, işaretçiyi "Diğer Araçlar"ın üzerinde tutun ve ardından "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 UZANTI PLANI düğmesini seçin.
Uzantı kök dizini alanında uzantının klasörünün yolunu belirtin ve ardından UZANTI PAKETİ düğmesini tıklayın. İlk kez paket için Özel anahtar alanını yoksayın.
Chrome, bir .crx
dosyası ve 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ıyı güncellemek gerekir.
.crx paketi güncelleme
manifest.json
ürününde 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ı için yol sağlayacaktır.
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
Düzenleyen
.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 geçerliyse 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 sunulmaz - Dosya aşağıdaki içerik türlerinden biriyle yayınlanır:
- boş dize
"text/plain"
"application/octet-stream"
"unknown/unknown"
"application/unknown"
"\*/\*"
- Dosya
Yüklenebilir bir dosyayı tanıyamamanı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ü (bir önceki listede olmayan) 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üncelle
Tarayıcı, birkaç saatte bir yüklü uzantılarda güncelleme URL'si olup olmadığını kontrol eder. Her biri için bir güncelleme manifest XML dosyasını bulmak üzere söz konusu 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ı da şu anda yüklü sürümle aynı özel anahtar kullanılarak imzalanmalıdır.
URL'yi güncelle
Chrome Web Mağazası'nın dışındaki sunucularda barındırılan uzantıların manifest.json
dosyasına update_url
alanını içermesi gerekir.
{
"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 alını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önetim Sayfası'nda görüntülenir.
- kod tabanı
.crx
dosyasının HTTPS URL'si.- sürüm
- İstemci tarafından,
codebase
tarafından belirtilen.crx
dosyasını indirip indirmeyeceğini belirlemek için kullanılır..crx
dosyasınınmanifest.json
dosyasındaki "version" değeriyle eşleşmelidir.
Güncelleme manifest XML dosyası, birden fazla <app>
öğesi ekleyerek 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üncellemenin zorunlu kılınması mümkündür.
Bu işlem, tüm yüklü 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ı Apache gibi herhangi bir düz web sunucusuna statik XML dosyası göndermek ve yeni uzantı sürümleri yayınlandıkça XML dosyasını güncellemek kadar kolaylaştırmak için tasarlanmıştır.
Birden fazla uzantı barındıran geliştiriciler, güncelleme isteğinde uzantı kimliğini ve sürümünü belirten istek parametrelerini kontrol edebilir. Bu parametrelerin eklenmesi, uzantıların statik XML dosyası yerine dinamik sunucu tarafı kodu ç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'sini işaret ediyor (https://test.com/extension_updates.php
):
- Uzantı 1
- Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Sürüm: "1.1"
- Uzantı 2
- Kimlik: "bbbbbbbbbbbbbbb"
- Sürüm: "0.4"
Her bir uzantıyı 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 çok uzantı listelenebilir. Önceki örnekte, kullanıcıda her iki uzantı da yüklüyse bu 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 (2.000 karakteri aşan) kadar fazlaysa, güncelleme kontrolü gerektiği şekilde ek GET istekleri gerçekleştirir.
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ışan bir uzantının güncellenmiş bir sürümü yayınlanabilir. Google Chrome otomatik olarak güncellense de, kullanıcı tabanının ç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 yüksek Google Chrome sürümlerine uygulandığından emin olmak için güncelleme yanıtındaki <app>
öğesine "prodversionmin" özelliğini ekleyin.
<?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, kullanıcıların yalnızca Google Chrome 3.0.193.0 veya sonraki bir sürümü kullanıyorlarsa sürüm 2'ye otomatik olarak güncelleme yapmalarını sağlar.