Chrome kullanıcılarının Chrome Web Mağazası dışında barındırılan uzantıları yükleyebileceği tek platform Linux'tur. 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ı 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.
Paket
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ınlanmışsa 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
Chrome Web Mağazası'nda barındırılan bir uzantını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. İndirmek için pop-up pencerede mavi main.crx
bağlantıyı tıklayın.
İndirilen dosya kişisel bir sunucuda barındırılabilir. Uzantıların içeriği Chrome Web Mağazası tarafından imzalanacağı için uzantıları yerel olarak barındırmanın en güvenli yolu budur. Bu, olası saldırıları ve müdahaleleri tespit etmenize yardımcı olur.
Yerel olarak .crx dosyası oluşturma
Uzantı dizinleri, Uzantı Yönetimi Sayfası'nda .crx
dosyalarına dönüştürülür. Her şey bir arada kutusundaki chrome://extensions/
simgesine gidin veya Chrome menüsünü tıklayın, işaretçiyi "Diğer Araçlar"ın üzerine getirin 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 UZANTISI düğmesini seçin.
Uzantı kök dizini alanında uzantının klasörünün yolunu belirtin ve UZANTIYI PAKETLE düğmesini tıklayın. İlk kez kullanılan paketler için Özel anahtar alanını yoksayabilirsiniz.
Chrome, uzantının özel anahtarını içeren .crx
dosyası ve .pem
dosyası olmak üzere iki dosya oluşturur.
Özel anahtarı kaybetmeyin. .pem
dosyasını gizli ve güvenli bir yerde saklayın. Uzantının güncellenmesi gerekir.
.crx paketini güncelleme
manifest.json
içindeki 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 UZANTIYI PAKETLE düğmesini tıklayın. Uzantı dizininin yolunu ve özel anahtarın konumunu belirtin.
Sayfada, güncellenmiş paketlenmiş uzantının yolu sağlanır.
Komut satırı üzerinden paketleme
chrome.exe
komutunu çağırarak uzantıları komut satırında paketleyin. Uzantının 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
Ana makine
.crx
dosyalarını barındıran bir sunucu, kullanıcıların uzantıyı bir bağlantıyı tıklayarak yüklemesine izin vermek için uygun HTTP üstbilgilerini kullanmalıdır.
Aşağıdakilerden biri doğruysa Google Chrome bir dosyayı yüklenebilir olarak kabul eder:
- Dosyanın içerik türü
application/x-chrome-extension
- Dosya soneki
.crx
şeklindedir ve aşağıdakilerin 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 dosyanın tanınmamasının en yaygın nedeni, sunucunun X-Content-Type-Options: nosniff
başlığını göndermesidir. En yaygın ikinci neden, sunucunun önceki listede bulunmayan bilinmeyen bir içerik türü göndermesidir. HTTP üstbilgisi 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ı, yüklü uzantılarda birkaç saatte bir güncelleme URL'si olup olmadığını kontrol eder. Her biri için ilgili URL'ye bir istek göndererek güncelleme manifest XML dosyası arar.
- 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 dokümanı olur.
Güncelleme manifestinde yüklü olandan daha yeni bir sürümden bahsedilirse 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ı 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",
...
}
Manifesti güncelleme
Sunucu tarafından döndürülen güncelleme manifesti 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ı olan Omaha tarafından kullanılan biçimden alınmıştır. Uzantılar 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ğeri temel alınarak 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ınmanifest.json
dosyasındaki "version" değeriyle eşleşmelidir.
Güncelleme manifesti 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üncelleme yapılması zorunlu kılınabilir.
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ındaki çalışmayı Apache gibi herhangi bir basit web sunucusuna statik bir XML dosyası bırakarak ve yeni uzantı sürümleri yayınlandıkça bu XML dosyasını güncelleyerek 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 bir XML dosyası yerine dinamik sunucu tarafı kod çalıştıran aynı URL'den güncellenmesine olanak tanır.
İstek parametrelerinin biçimi şudur:
?x=EXTENSION_DATA
Burada EXTENSION_DATA
, aşağıdaki 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 ediyorsa:
- 1. Uzantı
- Kimlik: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Sürüm: "1.1"
- 2. Uzantı
- Kimlik: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Sürüm: "0.4"
Her uzantıyı ayrı ayrı 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. Önceki örnek için, bir kullanıcı her iki uzantıyı da yüklemişse 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 yetecek kadar fazlaysa (2.000'den fazla karakterden fazla) güncelleme kontrolü, gerektiği şekilde ek GET istekleri gönderir.
Gelişmiş kullanım: minimum tarayıcı sürümü
Uzantılar sistemine daha fazla API eklendikçe, bir uzantının yalnızca tarayıcının yeni sürümleriyle çalışan güncellenmiş bir sürümü yayınlanabilir. Google Chrome otomatik olarak güncellense de kullanıcı tabanının çoğunluğunun 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 uygulanacağı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 sayede, kullanıcılar yalnızca Google Chrome 3.0.193.0 veya daha yeni bir sürümü kullanıyorsa 2. sürüme otomatik olarak güncellenir.