Geliştiriciler, arka plan sayfalarından uzantı hizmet işçilerine geçişte işlevleri değiştirmek için Chrome 109'dan itibaren chrome.offscreen
API'yi ve manifest iznini kullanabilir. Bu izni istemek, DOM API'lerini kullanmak için kullanıcı deneyimini kesintiye uğratan yeni pencereler veya sekmeler açmadan ekran dışı belgeler oluşturmanıza olanak tanır. chrome.offscreen
API artık Chrome uzantılarında kullanılabilir.
Chromium'da Manifest V3 uzantıları hizmet işçisine dayanır ancak hizmet işçileri, tam belge tabanlı sayfaların (arka plan ve etkinlik sayfaları dahil) sunduğu API'ler ve mekanizmalar için destek sağlamaz. Ayrıca, web sayfalarındaki DOM API'lerine erişmek için içerik komut dosyaları kullanmak, uzantıyı sayfadan sayfaya farklı içerik güvenliği politikalarının insafına bırakır. Bu sorunu çözmek için, Manifest V3 uzantılarının özel bir API aracılığıyla çalışma zamanında minimum, kapsamlı ve nispeten izinsiz ekran dışı dokümanlar açmasına izin vererek DOM ile ilgili özellikleri ve API'leri desteklemek üzere Ekran Dışı Dokümanlar'ı kullanıma sunuyoruz.
Özellik bilgileri
Ekran dışı dokümanlar, servis çalışanlarında desteklenmeyen kullanım alanlarını (ör. ses çalma) işlemek için özel olarak tasarlandığından bu sayfanın ömrü ve kendisine verilecek izinler, uzantı servis çalışanınınkinden ayrıdır.
Sayfa, Manifest V2'deki etkinlik sayfalarına benzer bir ömür mekanizmasına sahip olur. Bu mekanizma, sayfa işlem yapmayı bıraktığında sayfayı kaldırır. Ayrıca kullanıcı aracısı, belirtilen amaca özel olarak kullanım süresiyle ilgili başka kısıtlamalar da uygulayabilir.
Ekran dışı dokümanlar, yalnızca DOM API'lerinin erişebildiği API'lerdeki boşlukları doldurmak için tasarlanmıştır. Bu nedenle, uzantı API'lerinin doğrudan bu bağlamda gösterilmesi gerekmez. Uzantıların bunları "arka plan sayfası değişimi" olarak kullanma olasılığını azaltmak için ekran dışı dokümana yalnızca chrome.runtime
mesajlaşma API'leri sunulur. (Geliştiriciler, hizmet işçileri aracılığıyla ekran dışı dokümanı istemci olarak talep ederek web mesajlarını da kullanabilir.)
Bazı kullanım alanları (özellikle site taraması) kökler arası çerçevelere erişmeyi gerektirdiğinden, bu dokümanların kökler arası çerçeveleri yerleştirmesine, uzantı sayfalarının şu anda sahip olduğu kurallara uygun olarak izin verilir. Ekran dışı dokümanlarda, eklenti tarafından belirtilen içerik komut dosyaları, normal bir web sayfasında olduğu gibi gerekli içeriği almak için bu çerçevelerde çalışabilir.
Nedenler ve amaç gerektirmesi
Ekran dışı doküman oluşturmak için belirtilen nedenlerin ve daha fazla gerekçenin belirtilmesi gerekir. Bu nedenler API referans belgelerinde listelenir ve dokümanın ömrünü farklı şekillerde etkiler. Örneğin, ses oynatmak için açılan bir dokümanın geçerlilik süresi, şu anda pano yönetimi için açılan bir dokümanın geçerlilik süresinden farklı kurallara tabidir. Ayrıca, ekran dışı dokümanın amacı hakkında daha fazla ayrıntıyı gerekçeye ekleyebilirsiniz. Gerekçe, doküman üzerinde etkisi olan bir parametre değil, geliştirici tarafından yazılmış bir dizedir. Geliştiriciler geri bildirimlerini ve kullanım alanlarını paylaştıkça API'ye zaman içinde başka nedenler de eklenebilir.
Geleceğe doğru
Uygulama kolaylığı için bu API'nin ilk sürümü, aynı anda profil başına ve uzantı başına yalnızca tek bir sayfayı destekler. Gelecekteki sürümlerde bu özelliği birden fazla sayfayı destekleyecek şekilde esnetebiliriz. Şu anda, uzantı etkin bir gizli profille bölünmüş modda çalışıyorsa hem normal hem de gizli profillerin her biri için bir ekran dışı doküman olabilir. Ayrıca, daha sonra uzantı işleyiciye DOM işlevi verilmesi de planlanmaktadır. Ekran dışı API'yi kullanan işlevleri, daha sonra değiştirmek üzere hizmet çalışanındaki eşdeğer bir yorumlu işlevle eşleyerek uzantılarınızı "geleceke hazır" hale getirebilirsiniz.
// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
await chrome.offscreen.createDocument({
url: 'offscreen.html',
reasons: [chrome.offscreen.Reason.CLIPBOARD],
justification: 'Write text to the clipboard.',
});
}
// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
navigator.clipboard.writeText(value);
}
Ayrıca, hizmet işleyiciye DOM işlevleri ve API'ler eklendikçe, hizmet işleyicinin mevcut durumuna ve ekran dışı dokümanları kullanma nedenlerine bağlı olarak doküman oluşturma nedenleri listesine yeni öğeler eklenir veya mevcut öğeler listeden çıkarılır.
Sonuç
Ekran Dışı Belgeler, şu anda hizmet çalışanlarında kullanılamayan DOM veya pencere etkileşimi erişimi gerektiren uzantılara izin verir. Ayrıca, yeni kullanım alanlarının eklenebileceği ve gelecekte çözülmüş kullanım alanlarının kaldırılabileceği esnek bir yaklaşım sunar. Uzantıların belirli kullanım alanları için önerilen ekran dışı doküman API'sini kullanması gerekir. Uzantının birincil arka plan bağlamı, manifest dosyasında belirtilen hizmet çalışanı olarak kalmalıdır. Ekran dışı doküman, sınırlı API erişimine sahip olduğu için birincil uzantı mantığının depolandığı yer olmamalıdır. Ekran dışındaki bir belgenin kullanım ömrü, onu oluşturan hizmet işçisinden bağımsızdır. Hizmet çalışanı yaşam boyu süreyle ilgili dikkat edilmesi gereken noktalar ve uzantılardaki hizmet çalışanı yaşam boyu süresiyle ilgili kullanım alanları ayrı bir blog yayınında ele alınacaktır. Hizmet işçisine özellikler ve API'ler eklendikçe, ekran dışı dokümanları kullanmanın nedenleri zaman içinde değişecektir. Bu süreç ilerledikçe geliştiricilerin geri bildirimlerini almak istiyoruz.