Menyematkan konten ke halaman dengan aman 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 Kuartal 3 2023. |
| Serializable Fenced Frames Configs Masalah GitHub |
Tersedia di Chrome pada Kuartal 3 2023. |
| Opsi Format Tambahan untuk Makro Ukuran Iklan Protected Audience Masalah GitHub |
Tersedia di Chrome pada Kuartal 4 2023. |
| Beacon otomatis yang dikirim 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 K1 2024 |
| Memperkenalkan reserved.top_navigation_start/commit
Masalah GitHub, Masalah GitHub |
Tersedia di Chrome pada K1 2024 |
| Jangan Nonaktifkan Setelan Cookie di ReportEvent hingga 3PCD
Masalah GitHub |
Tersedia di Chrome pada K1 2024 |
| Menambahkan dukungan untuk beacon otomatis di subframe lintas origin
Masalah GitHub |
Tersedia di Chrome pada K1 2024 |
Mengizinkan Subframe Lintas-Asal untuk Mengirim Beacon reportEvent()
Masalah GitHub |
Tersedia di Chrome pada K2 2024 |
Referer header di beacon
Masalah GitHub |
Tersedia di Chrome pada K1 2025 |
| Dukungan data lintas origin beacon otomatis
Masalah GitHub |
Diperkirakan akan hadir di Chrome pada K2 2025 |
Mengapa kita memerlukan frame tertutup?
Fenced frame (<fencedframe>) adalah elemen HTML untuk konten
sematan, mirip dengan iframe. Tidak seperti iframe, frame tertutup membatasi komunikasi dengan konteks penyematannya untuk memungkinkan akses frame ke data lintas situs tanpa membagikannya dengan konteks penyematan. Beberapa API Privacy Sandbox
mungkin memerlukan dokumen tertentu untuk dirender dalam frame tertutup.
Demikian pula, data pihak pertama apa pun dalam konteks penyematan tidak dapat dibagikan ke frame tertutup.
Misalnya, jika news.example (konteks penyematan) menyematkan iklan dari
shoes.example dalam frame tertutup, news.example tidak dapat mengekstraksi data dari
iklan shoes.example, dan shoes.example tidak dapat mempelajari data pihak pertama dari
news.example.
Memperkuat privasi lintas situs dengan partisi penyimpanan
Saat menjelajahi web, Anda mungkin pernah melihat produk di satu situs, lalu melihatnya muncul lagi di iklan di situs yang sama sekali berbeda.
Saat ini, teknik periklanan ini terutama dicapai melalui teknologi pelacakan yang menggunakan cookie pihak ketiga untuk membagikan informasi di seluruh situs.
Chrome sedang mengerjakan pemartisian penyimpanan, yang memisahkan penyimpanan browser per situs. Tanpa partisi, jika iframe dari shoes.example
disematkan di news.example, dan iframe tersebut menyimpan nilai ke penyimpanan,
maka nilai tersebut dapat dibaca dari situs shoes.example. Jika penyimpanan telah dipartisi, iframe lintas situs tidak akan lagi berbagi penyimpanan, sehingga 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 dibagikan karena keduanya dianggap situs yang sama.
Partisi penyimpanan akan diterapkan ke API penyimpanan standar, termasuk LocalStorage, IndexedDB, dan cookie. Dalam dunia yang terpartisi, kebocoran informasi di seluruh penyimpanan pihak pertama akan berkurang secara signifikan.
Menangani data lintas situs
Frame tertutup adalah fitur Privacy Sandbox yang menyarankan agar situs tingkat teratas mempartisi data. Banyak proposal dan API Privacy Sandbox bertujuan untuk memenuhi kasus penggunaan lintas situs tanpa cookie pihak ketiga atau mekanisme pelacakan lainnya. Contoh:
- Protected Audience API memungkinkan penayangan iklan menurut minat dengan cara yang menjaga privasi.
- Shared Storage memungkinkan akses ke data lintas situs yang tidak dipartisi di lingkungan yang aman.
Frame tertutup dirancang untuk bekerja dengan Protected Audience API. Dengan Protected Audience API, minat pengguna dicatat di situs pengiklan dalam grup minat, bersama dengan iklan yang mungkin menarik bagi pengguna. Kemudian, di situs terpisah (dikenal sebagai "penayang"), iklan yang terdaftar dalam grup minat yang relevan dilelang dan iklan pemenang ditampilkan dalam frame tertutup.
Jika penayang menampilkan iklan yang menang dalam iframe dan skrip dapat membaca atribut src iframe, penayang dapat menyimpulkan informasi tentang minat pengunjung dari URL iklan tersebut. Hal ini tidak menjaga privasi.
Dengan frame yang dibatasi, penayang dapat menampilkan iklan yang cocok dengan minat pengunjung, tetapi src dan grup minat hanya akan diketahui oleh pengiklan dalam frame. Penayang tidak dapat mengakses informasi ini.
Bagaimana cara kerja frame tertutup?
Frame tertutup menggunakan objek FencedFrameConfig untuk navigasi. Objek ini dapat ditampilkan dari lelang Protected Audience API atau operasi pemilihan URL Shared Storage. Kemudian, objek config ditetapkan sebagai atribut config pada elemen frame tertutup. Hal ini berbeda dengan iframe yang menetapkan URL atau URN buram ke atribut src. Objek FencedFrameConfig memiliki properti url hanya baca; namun, karena kasus penggunaan saat ini mengharuskan URL sebenarnya dari resource internal disembunyikan, properti ini menampilkan string opaque saat dibaca.
Frame tertutup tidak dapat menggunakan postMessage untuk berkomunikasi dengan penyematnya. Namun, frame tertutup dapat menggunakan postMessage dengan iframe di dalam frame tertutup.
Frame tertutup akan diisolasi dari penayang dengan cara lain. Misalnya, penayang tidak akan memiliki akses ke DOM di dalam frame tertutup, dan frame tertutup tidak dapat mengakses DOM penayang. Selain itu, atribut seperti
name—yang dapat ditetapkan ke nilai apa pun dan diamati oleh
penayang—tidak tersedia di frame tertutup.
Frame tertutup berperilaku seperti konteks penjelajahan tingkat atas (seperti tab browser). Meskipun frame tertutup dalam kasus penggunaan tertentu (seperti iklan penargetan ulang berbasis minat) dapat berisi data lintas situs (seperti grup minat Protected Audience API), frame tidak dapat mengakses penyimpanan atau cookie yang tidak dipartisi. Frame tertutup dapat mengakses partisi penyimpanan dan cookie berbasis nonce yang unik.
Karakteristik frame tertutup dijelaskan lebih lanjut dalam penjelasan.
Apa perbedaan antara frame tertutup dan iframe?
Setelah mengetahui apa yang dapat dan tidak dapat dilakukan frame tertutup, ada baiknya membandingkannya dengan fitur iframe yang ada.
| Fitur | iframe |
fencedframe |
|---|---|---|
| Menyematkan konten | Ya | Ya |
| Konten tersemat dapat mengakses DOM konteks penyematan | Ya | Tidak |
| Konteks penyematan dapat mengakses DOM konten tersemat | 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 (bergantung pada kasus penggunaan) |
| Akses ke data lintas situs | Tidak | Ya (bergantung pada kasus penggunaan) |
Frame tertutup mendukung lebih sedikit opsi komunikasi eksternal untuk menjaga privasi.
Apakah frame tertutup akan menggantikan iframe?
Pada akhirnya, frame tertutup tidak akan menggantikan iframe dan Anda tidak perlu menggunakannya. Frame tertutup adalah frame yang lebih privat untuk digunakan saat data dari partisi tingkat teratas yang berbeda perlu ditampilkan di halaman yang sama.
Iframe same-site (terkadang dikenal sebagai iframe tepercaya) dianggap sebagai konten tepercaya.
Menggunakan frame dengan fence
Frame tertutup akan berfungsi bersama dengan Privacy Sandbox API lainnya untuk menampilkan dokumen dari partisi penyimpanan yang berbeda dalam satu halaman. API potensial sedang didiskusikan.
Kandidat saat ini untuk kombinasi ini mencakup:
- Dari keluarga TURTLEDOVE API (yang merupakan dasar untuk Protected Audience API), frame tertutup dapat berfungsi dengan Pengukuran Peningkatan Konversi menggunakan Shared Storage.
- Opsi lainnya adalah mengizinkan frame tertutup menjadi hanya baca atau mengakses penyimpanan yang tidak dipartisi.
Untuk mengetahui detail selengkapnya, lihat penjelasan kasus penggunaan Fenced Frame.
Contoh
Untuk mendapatkan objek config frame tertutup, Anda harus meneruskan resolveToConfig: true ke panggilan runAdAuction() Protected Audience API atau panggilan selectURL() Shared Storage. Jika properti tidak ditambahkan (atau disetel ke false), promise yang dihasilkan akan di-resolve ke URN yang hanya dapat digunakan dalam iframe.
const frameConfig = await navigator.runAdAuction({ // ...auction configuration resolveToConfig: true });
const frameConfig = await sharedStorage.selectURL('operation-name', { resolveToConfig: true });
Setelah mendapatkan konfigurasi, Anda dapat menetapkannya ke atribut config frame tertutup untuk membuka frame ke resource yang diwakili oleh konfigurasi. Versi Chrome yang lebih lama tidak mendukung properti resolveToConfig, jadi Anda tetap harus mengonfirmasi bahwa promise diselesaikan ke FencedFrameConfig sebelum membuka:
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) { const frame = document.createElement('fencedframe'); frame.config = frameConfig; }
Untuk mempelajari lebih lanjut, lihat penjelasan Fenced Frame dan konfigurasi Fenced Frame.
Header
Browser akan menetapkan Sec-Fetch-Dest: fencedframe untuk permintaan yang dibuat dari frame tertutup dan iframe yang disematkan dalam frame tertutup.
Sec-Fetch-Dest: fencedframe
Server harus menetapkan header respons Supports-Loading-Mode: fenced-frame agar dokumen dimuat dalam frame tertutup. Header juga harus ada untuk iframe apa pun di dalam frame tertutup.
Supports-Loading-Mode: fenced-frame
Konteks Shared Storage
Anda dapat menggunakan Private Aggregation untuk melaporkan data tingkat peristiwa dalam frame tertutup yang terkait dengan data kontekstual dari penyematan. Dengan menggunakan metode fencedFrameConfig.setSharedStorageContext(), Anda dapat meneruskan beberapa data kontekstual, seperti ID peristiwa, dari penyematan ke worklet penyimpanan bersama yang dimulai oleh Protected Audience API.
Dalam contoh berikut, kita menyimpan beberapa data yang tersedia di halaman penyematan dan beberapa data yang tersedia di frame tertutup dalam penyimpanan bersama. Dari halaman penyematan, ID peristiwa tiruan ditetapkan sebagai konteks penyimpanan bersama. Dari frame tertutup, data peristiwa frame diteruskan.
Dari halaman penyematan, 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 yang dibatasi, Anda dapat meneruskan data tingkat peristiwa dari frame ke worklet penyimpanan bersama (tidak terkait dengan data kontekstual dari penyematan 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 embedder dari sharedStorage.context dan data tingkat peristiwa frame dari objek data, lalu melaporkannya melalui Agregasi Pribadi:
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 penyematan dalam objek konfigurasi frame tertutup, lihat penjelasan.
Mencoba frame dengan fence
Gunakan flag Chrome untuk mengaktifkan Fenced Frame API di chrome://flags/#enable-fenced-frames.
Ada beberapa pilihan dalam dialog. Sebaiknya pilih *Aktifkan*, yang memungkinkan Chrome diupdate secara otomatis ke arsitektur baru saat tersedia.
Opsi lainnya, Diaktifkan dengan ShadowDOM dan Diaktifkan dengan arsitektur multi-halaman, menawarkan strategi penerapan yang berbeda yang hanya relevan bagi engineer browser. Saat ini, Aktifkan berfungsi dengan cara yang sama seperti Diaktifkan dengan ShadowDOM. Pada masa mendatang, Aktifkan akan dipetakan ke Aktifkan dengan arsitektur multi-halaman.
Deteksi fitur
Untuk menentukan apakah frame tertutup ditentukan:
if (window.HTMLFencedFrameElement) {
// The fenced frame element is defined
}
Untuk menentukan apakah konfigurasi frame yang dibatasi tersedia:
js
if (window.FencedFrameConfig && frameConfig instanceof FencedFrameConfig) {
// The fenced frame config is available
}
Dukungan browser
Berinteraksi dan memberikan masukan
Fenced Frame sedang dalam tahap diskusi aktif dan dapat berubah di masa mendatang. Jika Anda mencoba API ini dan memiliki masukan, kami ingin mendengarnya.
- GitHub: Baca penjelasan, ajukan pertanyaan, dan ikuti diskusi.