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 chrome.offscreen API dan izin manifes mulai dari Chrome 109. Meminta izin ini memungkinkan pembuatan dokumen di luar layar untuk menggunakan DOM API tanpa membuka jendela atau tab baru yang mengganggu pengalaman pengguna. chrome.offscreen API kini tersedia di ekstensi Chrome.

Di Chromium, ekstensi Manifes V3 berbasis pekerja layanan, tetapi pekerja layanan tidak memberikan 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 kebijakan keamanan konten yang berbeda-beda berdasarkan halaman. Untuk membantu mengatasi hal ini, kami memperkenalkan Dokumen Offscreen untuk mendukung fitur dan API terkait DOM dengan mengizinkan ekstensi Manifes V3 membuka dokumen offscreen yang minimal, terbatas, dan relatif tidak memiliki izin saat runtime melalui API khusus.

Informasi Fitur

Karena dokumen di balik layar dirancang secara khusus untuk menangani kasus penggunaan yang tidak didukung di pekerja layanan (misalnya, pemutaran audio), masa aktif halaman ini, dan izin yang akan diberikan terpisah dari pekerja layanan ekstensi. Halaman akan memiliki mekanisme masa aktif yang mirip dengan halaman peristiwa di Manifes V2, yaitu halaman akan dihapus saat berhenti melakukan tindakan. Selain itu, agen pengguna dapat menerapkan pembatasan lebih lanjut pada masa berlaku yang spesifik untuk tujuan yang ditentukan. Dokumen offscreen dirancang untuk mengisi kesenjangan dari API yang hanya dapat diakses oleh DOM API; karena itu, API ekstensi tidak perlu diekspos secara langsung dalam konteks ini. Untuk mengurangi kemungkinan ekstensi menggunakan ini sebagai "penggantian halaman latar belakang", hanya chrome.runtime messaging API yang diekspos ke dokumen di luar 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-asal, kami mengizinkan dokumen ini untuk menyematkan frame lintas-asal dengan mengikuti aturan yang sama dengan yang dimiliki halaman ekstensi saat ini. Dalam dokumen offscreen, skrip konten yang ditentukan oleh ekstensi dapat berjalan dalam frame ini untuk meng-scrape konten yang diperlukan, seperti yang dilakukan untuk halaman web normal.

Alasan, dan mewajibkan tujuan

Pembuatan 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 pada masa berlakunya dibandingkan dengan dokumen yang dibuka untuk pengelolaan papan klip. Anda juga dapat menambahkan detail lebih lanjut tentang tujuan dokumen di luar layar dalam justifikasi, yang merupakan string yang ditulis developer, dan bukan parameter dengan efek pada dokumen. Alasan lebih lanjut dapat ditambahkan ke API dari waktu ke waktu saat developer membagikan masukan dan kasus penggunaan mereka.

Ke depan

Untuk kemudahan penerapan, versi pertama API ini hanya mendukung satu halaman per ekstensi, per profil pada satu waktu. Dalam versi mendatang, kami dapat melonggarkan aturan 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. Rencananya, fungsi DOM pekerja ekstensi juga akan diberikan pada lain waktu. Anda dapat “mempersiapkan ekstensi untuk masa mendatang” dengan menyambungkan fungsi yang menggunakan API di luar layar dengan fungsi yang dikomentari yang setara di pekerja layanan untuk ditukar pada 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, saat fungsi dan API DOM 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 Offscreen memungkinkan ekstensi yang memerlukan akses interaksi DOM atau jendela yang saat ini tidak dapat dicapai di pekerja layanan. Hal ini juga memberikan pendekatan yang fleksibel, dengan kasus penggunaan baru dapat ditambahkan dan kasus penggunaan yang dipecahkan di masa mendatang dapat dihapus. Ekstensi harus menggunakan API dokumen offscreen yang diusulkan untuk kasus penggunaan tertentu, dan konteks latar belakang utama ekstensi harus tetap menjadi pekerja layanan yang ditentukan dalam manifes. Dokumen di luar 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 di ekstensi akan dibahas dalam postingan blog terpisah. Alasan untuk menggunakan dokumen offscreen akan berfluktuasi dari waktu ke waktu seiring fitur dan API ditambahkan ke pekerja layanan itu sendiri. Kami ingin mendengar masukan developer seiring berjalannya waktu.

Foto oleh Kari Shea di Unsplash