Ringkasan bingkai fence

Sematkan konten dengan aman ke halaman tanpa membagikan data lintas situs.

Status penerapan

Dokumen ini menguraikan elemen HTML baru: <fencedframe>.

Proposal Status
Perubahan Web API untuk urn ke konfigurasi
Penjelasan
Tersedia di Chrome pada K1 2023.
Makro Materi Iklan di Bingkai Berpagar untuk Pelaporan Iklan (FFAR)
Masalah GitHub
Tersedia di Chrome pada Kuartal 3 2023.
Mengirim Beacon Otomatis Sekali
Masalah GitHub
Tersedia di Chrome pada Q3 2023.
Konfigurasi Fenced Frames yang Dapat Diserialisasi
Masalah GitHub
Tersedia di Chrome pada Kuartal 3 2023.
Opsi Format Tambahan untuk Makro Ukuran Iklan Protected Audience
Masalah GitHub
Tersedia di Chrome pada Q4 2023.
Beacon otomatis mengirimkan ke semua URL terdaftar
Masalah GitHub | Masalah GitHub
Tersedia di Chrome pada Kuartal 4 2023.
Mengaktifkan Keluar dari Grup Minat Iklan dari iFrame Urn dan Frame Komponen Iklan
Masalah GitHub
Tersedia di Chrome pada Kuartal 1 2024
Memperkenalkan Reserve.top_navigation_start/commit
Masalah GitHub, Masalah GitHub
Tersedia di Chrome pada Kuartal 1 2024
Jangan Nonaktifkan Setelan Cookie di ReportEvent hingga 3PCD
Masalah GitHub
Tersedia di Chrome pada Kuartal 1 2024
Menambahkan dukungan untuk beacon otomatis di subframe lintas origin
Masalah GitHub
Tersedia di Chrome pada K1 2024
Izinkan Subframe Lintas Asal Mengirim Beacon reportEvent()
Masalah GitHub
Tersedia di Chrome pada Q2 2024

Mengapa kita memerlukan bingkai dengan fence?

Bingkai dengan fence (<fencedframe>) adalah elemen HTML untuk disematkan konten, mirip dengan iframe. Tidak seperti iframe, frame dengan fence membatasi komunikasi dengan konteks embedding-nya untuk memungkinkan akses frame ke lintas situs tanpa membagikannya dengan konteks embedding. Beberapa API Privacy Sandbox mungkin memerlukan dokumen tertentu untuk dirender dalam frame dengan fence.

Demikian pula, data pihak pertama apa pun dalam konteks penyematan tidak dapat dibagikan kepada {i>frame<i} berpagar.

Misalnya, news.example (konteks penyematan) menyematkan iklan dari shoes.example dalam bingkai dengan fence. news.example tidak dapat memindahkan data dari iklan shoes.example, dan shoes.example tidak dapat mempelajari data pihak pertama dari news.example.

Perkuat privasi lintas situs dengan partisi penyimpanan

Saat menjelajahi web, Anda mungkin pernah melihat produk di satu situs, Anda telah melihatnya muncul lagi dalam iklan di situs yang benar-benar berbeda.

Saat ini, teknik periklanan ini dicapai terutama melalui pelacakan yang menggunakan cookie pihak ketiga untuk berbagi informasi di seluruh situs. Ini adalah teknologi yang dikomitmenkan Chrome untuk keluar dan ganti dengan varian yang lebih menjaga privasi.

Chrome sedang mengerjakan penyimpanan pembuatan partisi, yang memisahkan penyimpanan browser per situs. Saat ini, jika iframe dari shoes.example disematkan di news.example, dan iframe tersebut menyimpan nilai ke dalam penyimpanan, maka nilai tersebut dapat dibaca dari situs shoes.example. Kapan penyimpanan telah iframe lintas situs yang dipartisi tidak akan lagi berbagi penyimpanan, shoes.example tidak akan dapat mengakses informasi yang disimpan oleh iframe. Jika iframe ditayangkan dari *.shoes.example dan disematkan di *.shoes.example, penyimpanan browser akan digunakan bersama karena dianggap sebagai situs yang sama.

Perbandingan status partisi penyimpanan sebelum dan sesudah.

Partisi penyimpanan akan diterapkan ke API penyimpanan standar, termasuk LocalStorage, IndexedDB, dan cookie. Dalam dunia yang terpartisi, informasi kebocoran di seluruh penyimpanan pihak pertama akan berkurang secara signifikan.

Bekerja dengan data lintas situs

Frame berpagar adalah fitur Privacy Sandbox yang menyarankan situs tingkat atas untuk mempartisi data. Banyak Privacy Sandbox dan API ditujukan untuk memenuhi kasus penggunaan lintas situs tanpa cookie pihak ketiga, mekanisme pelacakan lainnya. Contoh:

  • Protected Audience API memungkinkan penayangan iklan menurut minat dengan cara yang menjaga privasi.
  • Penyimpanan Bersama memungkinkan akses ke data lintas situs yang tidak dipartisi dalam lingkungan yang aman.

Mari kita pertimbangkan bagaimana {i>fence frame<i} dapat bekerja dengan Protected Audience API. Dengan Protected Audience API, minat pengguna terdaftar di situs pengiklan di minat grup, bersama dengan iklan yang mungkin menarik bagi pengguna. Kemudian, pada situs terpisah (dikenal sebagai "penayang"), iklan yang terdaftar dalam grup minat yang relevan dilelang dan iklan pemenang ditampilkan dalam bingkai dengan pagar.

Jika penayang menampilkan iklan pemenang dalam iframe dan skrip dapat membaca atribut src iframe, penayang dapat menyimpulkan informasi tentang atribut minat dari URL iklan tersebut. Tindakan ini tidak melindungi privasi.

Dengan bingkai dengan pagar, penayang dapat menampilkan iklan yang cocok dengan pengunjung minat, tetapi src dan grup minat hanya akan diketahui oleh pengiklan dalam bingkai. Penerbit tidak dapat mengakses informasi ini.

Bagaimana cara kerja bingkai dengan fence?

Frame berpagar menggunakan objek FencedFrameConfig untuk navigasi. Objek ini dapat ditampilkan dari lelang Protected Audience API atau operasi pemilihan URL Penyimpanan Bersama. Kemudian, objek konfigurasi ditetapkan sebagai atribut config pada elemen frame dengan fence. Ini berbeda dengan iframe tempat URL atau URN buram ditetapkan ke atribut src. Objek FencedFrameConfig memiliki properti url hanya baca; namun, karena kasus penggunaan saat ini memerlukan URL aktual dari resource internal untuk disembunyikan, properti ini akan menampilkan string opaque saat dibaca.

Frame dengan fence tidak dapat menggunakan postMessage untuk berkomunikasi dengan sematannya. Namun, frame dengan fence dapat menggunakan postMessage dengan iframe di dalam frame dengan fence.

Frame berpagar akan diisolasi dari penerbit dengan cara lain. Misalnya penayang tidak akan memiliki akses ke DOM di dalam bingkai dengan fence, dan frame dengan fence tidak dapat mengakses DOM penayang. Selanjutnya, atribut seperti name—yang dapat ditetapkan ke nilai apa pun dan diamati oleh penayang—tidak tersedia dalam frame dengan fence.

Bingkai dengan pagar berperilaku seperti penjelajahan tingkat atas konteks (misalnya, tab browser). Meskipun fence dalam kasus penggunaan tertentu (seperti opaque-ads) dapat berisi data lintas situs (seperti minat Protected Audience API grup), frame tidak dapat mengakses penyimpanan atau cookie yang tidak dipartisi. Channel opaque-ads frame dengan fence dapat mengakses cookie dan penyimpanan unik berbasis nonce partisi.

Karakteristik bingkai dengan fence diuraikan lebih lanjut dalam penjelasan kami.

Bagaimana perbedaan frame dengan fence dibandingkan dengan iframe?

Setelah Anda mengetahui apa yang akan dan tidak akan dilakukan {i>fence, <i}kita perlu membandingkan ke fitur iframe yang ada.

Fitur iframe fencedframe
Menyematkan konten Ya Ya
Konten yang disematkan dapat mengakses DOM konteks penyematan Ya Tidak
Menyematkan konteks dapat mengakses DOM konten yang disematkan Ya Tidak
Atribut yang dapat diamati, seperti name Ya Tidak
URL (http://example.com) Ya Ya (bergantung pada kasus penggunaan)
Sumber buram yang dikelola browser (urn:uuid) Tidak Ya
Akses ke data lintas situs Tidak Ya (bergantung pada kasus penggunaan)

Frame berpagar mendukung lebih sedikit opsi komunikasi eksternal untuk menjaga privasi.

Apakah frame dengan fence menggantikan iframe?

Pada akhirnya, frame dengan fence tidak akan menggantikan iframe dan Anda tidak perlu menggunakannya. {i>Frame<i} berpagar adalah {i>frame<i} yang lebih pribadi untuk digunakan ketika data dari partisi tingkat atas yang berbeda perlu ditampilkan di halaman yang sama.

iframe situs yang sama (terkadang dikenal sebagai iframe ramah) dianggap tepercaya saat ini.

Menggunakan bingkai dengan fence

Frame berpagar akan berfungsi bersama API Privacy Sandbox lain untuk menampilkan dokumen dari partisi penyimpanan yang berbeda dalam satu halaman. API potensial saat ini sedang dibahas.

Kandidat saat ini untuk kombinasi ini mencakup:

Untuk detail selengkapnya, lihat Bingkai Berpagar penjelasan kasus penggunaan.

Contoh

Untuk mendapatkan objek config frame dengan fence, Anda harus meneruskan resolveToConfig: true ke panggilan runAdAuction() Protected Audience API atau panggilan selectURL() Penyimpanan Bersama. Jika properti tidak ditambahkan (atau ditetapkan ke false), promise yang dihasilkan akan di-resolve menjadi URN yang hanya dapat digunakan dalam iframe.

Mendapatkan konfigurasi frame dengan fence dari lelang Protected Audience API
const frameConfig = await navigator.runAdAuction({
  // ...auction configuration
  resolveToConfig: true
});
Mendapatkan konfigurasi frame dengan fence dari Pemilihan URL Penyimpanan Bersama
const frameConfig = await sharedStorage.selectURL('operation-name', {
  resolveToConfig: true
});

Setelah memperoleh konfigurasi, Anda dapat menetapkannya ke atribut config frame dengan fence untuk membuka frame ke resource yang diwakili oleh konfigurasi. Chrome versi lama tidak mendukung properti resolveToConfig, sehingga Anda tetap harus mengonfirmasi bahwa promise telah ditetapkan ke FencedFrameConfig sebelum membuka:

Menetapkan konfigurasi ke atribut fence frame
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
  const frame = document.createElement('fencedframe');
  frame.config = frameConfig;
}

Untuk mempelajari lebih lanjut, lihat penjelasan Fenced Frame dan Fenced Frame config.

Header

Browser akan menetapkan Sec-Fetch-Dest: fencedframe untuk permintaan yang dibuat dari frame dengan fence dan iframe yang disematkan dalam frame dengan fence.

Sec-Fetch-Dest: fencedframe

Server harus menetapkan header respons Supports-Loading-Mode: fenced-frame untuk dokumen yang akan dimuat dalam frame dengan fence. Header juga harus ada untuk iframe apa pun di dalam frame dengan fence.

Supports-Loading-Mode: fenced-frame

Konteks Penyimpanan Bersama

Anda mungkin perlu menggunakan Private Aggregation untuk melaporkan data tingkat peristiwa dalam frame dengan fence yang terkait dengan data kontekstual dari sematan. Dengan menggunakan metode fencedFrameConfig.setSharedStorageContext(), Anda dapat meneruskan beberapa data kontekstual, seperti ID peristiwa, dari sematan ke worklet penyimpanan bersama yang dimulai oleh Protected Audience API.

Pada contoh berikut, kami menyimpan beberapa data yang tersedia di halaman sematan dan beberapa data yang tersedia dalam frame dengan fence di penyimpanan bersama. Dari halaman sematan, ID peristiwa tiruan ditetapkan sebagai konteks penyimpanan bersama. Dari frame dengan fence, data peristiwa frame diteruskan.

Dari halaman sematan, Anda dapat menetapkan data kontekstual sebagai konteks penyimpanan bersama:

const frameConfig = await navigator.runAdAuction({ resolveToConfig: true });

// Data from the embedder that you want to pass to the shared storage worklet
frameConfig.setSharedStorageContext('some-event-id');

const frame = document.createElement('fencedframe');
frame.config = frameConfig;

Dari frame dengan fence, Anda dapat meneruskan data tingkat peristiwa dari frame ke worklet penyimpanan bersama (tidak terkait dengan data kontekstual dari embeddingder di atas):

const frameData = {
  // Data available only inside the fenced frame
}

await window.sharedStorage.worklet.addModule('reporting-worklet.js');

await window.sharedStorage.run('send-report', {
  data: {
    frameData
  },
});

Anda dapat membaca informasi kontekstual sematan dari sharedStorage.context dan data tingkat peristiwa frame dari objek data, lalu melaporkannya melalui Private Aggregation:

class ReportingOperation {
  convertEventIdToBucket(eventId) { ... }
  convertEventPayloadToValue(info) { ... }

  async run(data) {
    // Data from the embedder
    const eventId = sharedStorage.context;

    // Data from the fenced frame
    const eventPayload = data.frameData;

    privateAggregation.contributeToHistogram({
      bucket: convertEventIdToBucket(eventId),
      value: convertEventPayloadToValue(eventPayload)
    });
  }
}

register('send-report', ReportingOperation);

Untuk mempelajari lebih lanjut konteks sematan dalam objek konfigurasi frame dengan fence, lihat penjelasan.

Coba bingkai dengan fence

Gunakan Chrome tanda untuk mengaktifkan Fenced Frame API di chrome://flags/#enable-fenced-frames.

Dalam Eksperimen Chrome, tetapkan Diaktifkan untuk tanda bernama Aktifkan elemen bingkai berpagar

Ada beberapa pilihan dalam dialog. Sebaiknya Anda memilih *Aktifkan*, yang memungkinkan Chrome diupdate secara otomatis ke arsitektur baru saat tersedia.

Opsi lainnya, Enabled with ShadowDOM dan Enabled with multiple arsitektur halaman, menawarkan berbagai strategi implementasi yang hanya relevan bagi insinyur browser. Saat ini, opsi Aktifkan berfungsi dengan cara yang sama seperti Diaktifkan dengan ShadowDOM. Di masa mendatang, Enable akan dipetakan ke Enable with arsitektur multi-halaman.

Deteksi fitur

Untuk menentukan apakah frame dengan fence ditentukan:

if (window.HTMLFencedFrameElement) {
  // The fenced frame element is defined
}

Untuk menentukan apakah konfigurasi frame dengan fence tersedia: js if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) { // The fenced frame config is available }

Dukungan browser

Elemen <fencedframe> masih dalam mode eksperimental, sehingga saat ini elemen tersebut didukung mulai Chrome 97 dan seterusnya. Saat ini, fitur tersebut tidak didukung oleh browser.

Berinteraksi dan memberikan masukan

Bingkai Berpagar sedang dalam diskusi aktif dan dapat berubah sewaktu-waktu masa depan. Jika Anda mencoba API ini dan memiliki masukan, kami ingin sekali mendengarnya.

Cari tahu selengkapnya