Uzantınızı Googlebook OS'e uyarlama

Googlebook OS, Googlebook cihazlar için geliştirilmiş bir işletim sistemidir. Android teknoloji yığını üzerine kurulmuş ve ChromeOS'in masaüstü temelleriyle eşleştirilmiştir. Googlebooks, Windows, macOS ve ChromeOS'te bulunan WebExtensions platformunu destekler ancak bu platformun çalışma şekliyle ilgili bazı farklılıklar vardır.

  • Platform algılama nadiren gerekir ancak uzantı API'leri android, kullanıcı aracısı ise ChromeOS'i bildirdiğinden mevcut kontroller yanlış tetiklenebilir.
  • Yerel mesajlaşma henüz kullanıma sunulmadı ancak üzerinde çalışılıyor. Mesajların, masaüstü yürütülebilir dosyası yerine yüklü bir Android uygulamasına yönlendirilmesini bekleyin.
  • Klavye kısayollarında chromeos girişleri yerine Linux tuş bağlamaları kullanılır.
  • SharedArrayBuffer, kökler arası izolasyonun etkinleştirilmesini gerektirir ve hizmet çalışanı yerine bir uzantı sayfasında veya ekran dışı dokümanda çalıştırılmalıdır.
  • Kullanıcı aracısı Chrome OS bildirse de yalnızca ChromeOS'e özel API'ler Googlebook OS'te desteklenmez. Bu izinleri bildiren uzantılar yüklenmeye devam eder ancak API ad alanları çalışma zamanında undefined olur.
  • browser.system.storage, Googlebook OS'te desteklenmediğinden API ad alanı çalışma zamanında undefined olur.

Platform algılama

Çoğu uzantının Googlebook OS'i algılaması gerekmez. Tarayıcının hangi işletim sisteminde çalıştığını kontrol etmek yerine özellik algılama ve duyarlı tasarım gibi standart web geliştirme en iyi uygulamalarını kullanın.

Uzantınız zaten işletim sistemini kontrol ediyorsa uzantı API'leri ve kullanıcı aracısı, Googlebook OS'te farklı platformlar döndürür.

  • chrome.runtime.getPlatformInfo().os iade 'android'. Uzantınız mobil tarayıcılarla kod paylaşıyorsa ve 'android' simgesinin telefon anlamına geldiğini varsayıyorsa Googlebook kullanıcıları dizüstü bilgisayarda mobil kullanıcı arayüzünüzü görür.
  • navigator.userAgent, CrOS değerini içeriyor. Genel sayfa düzeni için Chromebook'un eşleştirilmesi iyi sonuç verir. Ancak navigator.userAgentData.platform değeri döndürülür 'Android'. Uzantınız, ChromeOS klavye kısayolu ipuçlarını (ör. Search tuşu) göstermek veya yalnızca ChromeOS'e özel API'leri çağırmak için kullanıcı aracısını kontrol ediyorsa bu kontroller Googlebook'ta yanlış sonuç verir.

Aşağıdaki tabloda bu sinyaller platformlar arasında karşılaştırılmaktadır.

Sinyal Googlebook OS Android telefon Chromebook Windows, macOS, Linux
runtime.getPlatformInfo().os android android cros mac, win ve linux
navigator.userAgentData.platform Android Android Chrome OS Windows, macOS ve Linux
navigator.userAgentData.mobile false true false false

Buna karşılık, her iki platform da dondurulmuş X11; CrOS x86_64 14541.0.0 platform jetonunu bildirdiğinden navigator.userAgent, hem Googlebook OS hem de ChromeOS'te aynı küçültülmüş kullanıcı aracısı dizesini döndürür.

// Googlebook OS
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36
// ChromeOS
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/157.0.0.0 Safari/537.36

Tüm web geliştirme işlemlerinde olduğu gibi, platform algılama da güvenilir olmayabilir. Bu nedenle, ihtiyacınız olan şeyi doğrudan test etmek için özellik algılamayı kullanamadığınız durumlarda platform algılamayı kullanın. Googlebook OS'i hem Android telefondan hem de Chromebook'tan ayırt etmeniz gerekiyorsa runtime.getPlatformInfo() ile User-Agent Client Hints'teki mobile ipucunu birleştirerek bunu yapabilirsiniz.

async function getPlatform() {
  const { os, arch } = await chrome.runtime.getPlatformInfo();
  // userAgentData is undefined in browsers that don't implement User-Agent
  // Client Hints, so read mobile defensively.
  const mobile = navigator.userAgentData?.mobile;
  return {
    os,
    arch,
    isGooglebook: os === 'android' && mobile === false,
    isPhone: os === 'android' && mobile !== false
  };
}

Dize karşılaştırmalarının bu özel kombinasyonu, ürün lansmanı sırasında Googlebook OS cihazlarını benzersiz bir şekilde işaret etse de bu durum her zaman geçerli olmayabilir. Zaman içinde daha fazla cihaz gönderilmeye başlandıkça, çeşitli form faktörlerinde bazı Googlebook OS cihazların bu algılamayla eşleşmediği bir zaman olabilir.

İstemci ipuçlarını kullanarak web sayfalarındaki veya sunucudaki Googlebook'ları algılamak için Googlebook'ları tanımlama başlıklı makaleyi inceleyin.

Yerel mesajlaşma

Yerel mesajlaşma özelliği henüz Googlebook OS'te kullanılamıyor ancak bu özellik üzerinde çalışılıyor. Bu uzantıların, yerel masaüstü yürütülebilir dosyaları yerine yüklü Android uygulamalarıyla iletişim kurmasını bekleyebilirsiniz. Şimdilik nativeMessaging iznini bildiren uzantılar Googlebook OS'e yüklenip çalışmaya devam ediyor ancak bağlantı kurma girişimleri başarısız oluyor. Uzantınızın bağlantı hatalarını düzgün bir şekilde işlediğinden ve yerel ana makine kullanılamadığında web tabanlı bir iş akışına geri döndüğünden emin olun. Güncellemeler için 555299632 numaralı sorunu takip edin.

Klavye kısayolları

commands kısayolları, Linux'ta Chrome ile aynı kurallara tabidir. Chrome, Googlebook OS'te suggested_key girişinin linux bölümünü okur. Bu nedenle, chromeos altında tanımlanan kısayollar geçerli değildir. Googlebook OS cihazlarında "Arama" tuşu olmadığından Search tuş kombinasyonları da çalışmaz.

SharedArrayBuffer

Windows, macOS, Linux ve ChromeOS'te uzantılar SharedArrayBuffer her bağlamda otomatik olarak kullanılabilir. Googlebook OS'te uzantıların SharedArrayBuffer kullanabilmesi için manifest.json içinde kökler arası erişimi kapatması gerekir.

Kökler arası izolasyonu etkinleştirmek, uzantı belgelerinde (ör. pop-up'lar, seçenekler sayfaları ve ekran dışı belgeler) SharedArrayBuffer'yı etkinleştirir. Ancak Chrome henüz hizmet çalışanları için kaynaklar arası izolasyonu desteklemediğinden (40150182 numaralı sorun) uzantı hizmeti çalışanlarında SharedArrayBuffer etkinleştirilmez. Arka plan mantığınız SharedArrayBuffer'ya (ör. iş parçacıklı WebAssembly çalıştırmak için) dayanıyorsa bu kodu hizmet çalışanı yerine ekran dışı bir dokümanda çalıştırın.

Yalnızca ChromeOS'e özel API'ler

Chrome Uzantıları API referansında yalnızca ChromeOS olarak işaretlenen API'ler (ör. documentScan, fileSystemProvider, vpnProvider ve printing), navigator.userAgent CrOS'ü içerse bile Googlebook OS'te desteklenmez. Bu izinleri beyan eden uzantılar yüklenmeye ve çalışmaya devam eder ancak API ad alanları çalışma zamanında undefined olur. Kullanıcı aracısı algılamaya güvenmek yerine, çağırmadan önce bir API ad alanının mevcut olup olmadığını kontrol edin.

browser.system.storage

browser.system.storage API, Googlebook OS'te desteklenmez. manifest.json içinde system.storage iznini bildiren uzantılar yüklenmeye ve çalışmaya devam eder ancak çalışma zamanında ad alanı undefined olur. getInfo(), ejectDevice() çağrılmadan veya depolama alanı dinleyicileri kaydedilmeden önce API'nin tanımlanıp tanımlanmadığını kontrol edin.