Dokumen Luar Layar di Manifes V3

Ian Stanion
Ian Stanion

Untuk mengganti fungsi dalam transisi dari halaman latar belakang ke pekerja layanan ekstensi, developer dapat menggunakan API chrome.offscreen dan izin manifes mulai Chrome 109. Meminta izin ini memungkinkan pembuatan dokumen di luar layar untuk menggunakan DOM API tanpa perlu membuka jendela atau tab baru yang mengganggu pengalaman pengguna. chrome.offscreen API kini tersedia di ekstensi Chrome.

Di Chromium, ekstensi Manifes V3 berbasis service worker, tetapi service worker tidak menyediakan dukungan untuk API dan mekanisme yang sama seperti yang dilakukan halaman berbasis dokumen lengkap (yang mencakup halaman latar belakang dan peristiwa). Selain itu, penggunaan skrip konten untuk mengakses DOM API di halaman web membuat ekstensi bergantung pada berbagai kebijakan keamanan konten berdasarkan halaman ke halaman. Untuk membantu mengatasi hal ini, kami memperkenalkan Dokumen Offscreen untuk mendukung fitur dan API terkait DOM dengan memungkinkan ekstensi Manifes V3 membuka dokumen minimal, terbatas, dan relatif tanpa izin pada runtime melalui API khusus.

Informasi Fitur

Karena dokumen di balik layar didesain khusus untuk menangani kasus penggunaan yang tidak didukung dalam pekerja layanan (misalnya, pemutaran audio), masa aktif halaman ini, dan izin yang akan diberikan terpisah dari pekerja layanan ekstensi. Halaman akan memiliki mekanisme sepanjang waktu yang mirip dengan halaman peristiwa di Manifes V2, yaitu halaman tersebut akan dihapus saat berhenti melakukan tindakan. Selain itu, agen pengguna dapat menerapkan batasan lebih lanjut selama masa aktif khusus untuk tujuan yang ditentukan. Dokumen di luar layar didesain untuk mengisi kekurangan dari API yang hanya dapat diakses oleh DOM API; karenanya, API ekstensi tidak perlu diekspos secara langsung dalam konteks ini. Untuk mengurangi kemungkinan ekstensi menggunakannya sebagai "penggantian halaman latar belakang", hanya API pesan chrome.runtime yang diekspos ke dokumen di balik layar. (Developer juga dapat menggunakan pesan web dengan mengklaim dokumen di luar layar sebagai Klien melalui pekerja layanan mereka.) Karena beberapa kasus penggunaan - khususnya, scraping situs - memerlukan akses ke frame lintas origin, kami mengizinkan dokumen ini untuk menyematkan frame lintas origin dengan mengikuti aturan yang sama dengan yang dimiliki halaman ekstensi saat ini. Dalam dokumen di balik layar, skrip konten yang ditentukan oleh ekstensi dapat berjalan dalam bingkai ini untuk melakukan scraping konten yang diperlukan, seperti yang dilakukan pada halaman web normal.

Alasan, dan memerlukan tujuan

Membuat dokumen di balik layar memerlukan alasan yang dinyatakan dan justifikasi lebih lanjut. Alasan ini tercantum dalam dokumentasi referensi API, dan menangani masa aktif dokumen dengan cara yang berbeda. Misalnya, dokumen yang dibuka untuk pemutaran audio saat ini memiliki aturan yang berbeda yang diterapkan selama masa aktifnya dibandingkan dokumen yang dibuka untuk pengelolaan papan klip. Anda juga dapat menambahkan detail lebih lanjut tentang tujuan dokumen di balik layar dalam justifikasi, yang merupakan string yang ditulis developer, dan bukan parameter dengan efek pada dokumen. Alasan lainnya dapat ditambahkan ke API seiring waktu seiring developer memberikan masukan dan kasus penggunaannya.

Ke depan

Untuk kemudahan penerapan, versi pertama API ini hanya mendukung satu halaman per ekstensi, per profil dalam satu waktu. Pada versi mendatang, kami dapat melonggarkan setelan ini untuk mendukung beberapa halaman. Saat ini, jika ekstensi berjalan dalam mode terpisah dengan profil samaran aktif, profil normal dan samaran masing-masing dapat memiliki satu dokumen di balik layar. Direncanakan untuk memberikan fungsi DOM pekerja ekstensi di lain waktu. Anda dapat "siap menghadapi masa depan" ekstensi dengan memasangkan fungsi yang menggunakan offscreen API dengan fungsi yang diberi komentar setara dalam pekerja layanan untuk ditukar di lain waktu.

// 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);
}

Selain itu, karena fungsi DOM dan API ditambahkan ke pekerja layanan, daftar alasan untuk membuat dokumen akan ditambahkan atau dikurangi bergantung pada status pekerja layanan saat ini, dan alasan untuk menggunakan dokumen di luar layar.

Kesimpulan

Dokumen di Luar Layar mengizinkan ekstensi yang memerlukan akses interaksi DOM atau jendela yang saat ini tidak dapat dicapai di pekerja layanan. Solusi ini juga memberikan pendekatan yang fleksibel, dengan kasus penggunaan baru dapat ditambahkan dan kasus penggunaan yang akan diselesaikan di masa mendatang dapat dihapus. Ekstensi harus menggunakan API dokumen di balik layar yang diusulkan untuk kasus penggunaan tertentu, dan konteks latar belakang utama ekstensi harus tetap menjadi pekerja layanan yang ditentukan dalam manifes. Dokumen di balik layar tidak boleh menjadi tempat untuk menyimpan logika ekstensi utama karena memiliki akses API yang terbatas. Masa aktif dokumen di balik layar tidak bergantung pada pekerja layanan yang membuatnya. Pertimbangan masa aktif pekerja layanan dan kasus penggunaan yang terkait dengan masa aktif pekerja layanan dalam ekstensi akan dibahas dalam postingan blog terpisah. Alasan untuk menggunakan dokumen di balik layar akan berfluktuasi dari waktu ke waktu karena fitur dan API ditambahkan ke pekerja layanan itu sendiri. Kami ingin mendengar masukan dari developer seiring perkembangan fitur ini.

Foto oleh Kari Shea di Unsplash