Hai! Saya seorang pemasok pembuka jendela, dan saya sering ditanya beberapa pertanyaan menarik tentang sisi teknis. Satu pertanyaan yang muncul sedikit adalah, "Dapatkah saya mengakses DOM pembuka jendela dari jendela anak?" Mari selami topik ini dan lihat apa.
Pertama, mari kita jelaskan apa DOM itu. Model objek dokumen, atau DOM singkatnya, seperti representasi pohon - terstruktur dari semua elemen pada halaman web. Ini memungkinkan JavaScript untuk berinteraksi dengan elemen -elemen ini, mengubah gaya, konten, dan sebagainya. Sekarang, ketika kita berbicara tentang pembuka jendela dan jendela anak, kita biasanya berurusan dengan skenario di mana satu halaman web membuka yang lain.
Bayangkan Anda berada di halaman utama (pembuka jendela) dan Anda mengklik tombol yang membuka tab atau jendela baru (jendela anak). Pertanyaannya adalah, dapatkah jendela anak mencapai kembali dan mengacaukan DOM dari halaman utama? Nah, jawabannya bukanlah ya atau tidak sederhana.
Kebijakan Asal yang sama
Aturan besar di sini sama - kebijakan asal. Ini adalah ukuran keamanan di browser web yang membatasi halaman dari mengakses DOM halaman lain jika mereka memiliki asal yang berbeda. Asal pada dasarnya adalah kombinasi dari protokol (seperti HTTP atau HTTPS), domain (misalnya, www.example.com), dan nomor port.
Jika pembuka jendela dan jendela anak memiliki asal yang sama, segalanya menjadi jauh lebih fleksibel. Misalnya, jika Anda membuka jendela baru dari situs web Anda sendiri, jendela anak dapat mengakses DOM jendela pembuka. Anda dapat menggunakanwindow.openerobjek dalam JavaScript untuk melakukan ini. Inilah contoh sederhana:
// di jendela anak if (window.opener) {var openerDocument = window.opener.document; // Sekarang Anda dapat mengakses elemen dalam dokumen pembuka var someelement = openerDocument.getElementById ('beberapa - id'); if (someElement) {someelement.style.color = 'red'; }}
Tetapi jika asalnya berbeda, browser akan memblokir akses. Ini untuk mencegah situs web jahat mencuri informasi sensitif dari situs lain. Misalnya, jika Anda membuka jendela anak dari situs E - Commerce Anda ke gateway pembayaran pihak ketiga, jendela gateway pembayaran tidak dapat mengakses DOM situs E - Commerce Anda.
Mengapa Anda ingin mengakses DOM pembuka jendela?
Sebagai pemasok pembuka jendela, saya dapat memikirkan beberapa alasan mengapa seseorang mungkin ingin melakukan ini. Katakanlah Anda memiliki katalog produk di halaman utama Anda, dan ketika pengguna mengklik produk, itu membuka jendela anak dengan informasi yang lebih rinci. Anda mungkin ingin jendela anak memperbarui DOM halaman utama untuk menunjukkan bahwa produk telah dilihat atau untuk menambahkannya ke daftar "baru -baru ini dilihat".
Kasing penggunaan lainnya bisa dalam alat konfigurasi. Anda membuka jendela anak untuk mengonfigurasi produk pembuka jendela, seperti aSakelar buta bermotor. Setelah pengguna menyelesaikan konfigurasi di jendela anak, Anda dapat menggunakan akses ke DOM pembuka jendela untuk memperbarui halaman utama dengan opsi konfigurasi yang dipilih.
Menangani Situs Salib - Asal
Jika Anda perlu mengakses DOM pembuka jendela dalam situasi salib - asal, ada beberapa solusi. Salah satu opsi adalah menggunakan API postmessage. Ini memungkinkan Windows dengan asal yang berbeda untuk berkomunikasi dengan cara yang aman.
Ide dasarnya adalah bahwa satu jendela dapat mengirim pesan ke jendela lain menggunakanpostmessagemetode, dan jendela penerima dapat mendengarkan pesan -pesan ini menggunakanwindow.addeventlistener ('pesan', callback)peristiwa.
Begini cara kerjanya:
// di jendela anak var targetorigin = 'https://www.example.com'; window.opener.postmessage ('beberapa data dari jendela anak', targetorigin); // Di jendela pembuka window.addeventListener ('pesan', function (event) {if (event.origin === 'https: // child - window - domain.com') {console.log ('Pesan diterima:', event.data);}});
Dengan cara ini, Anda dapat bertukar data antara dua jendela tanpa secara langsung mengakses DOM, yang diblokir oleh kebijakan asal yang sama.
Contoh nyata - dunia dalam bisnis pembuka jendela
Mari kita bicara tentang beberapa skenario dunia nyata dalam bisnis pembuka jendela. Misalkan Anda memiliki halaman utama yang mencantumkan berbagai jenis pembuka jendela, sepertiMotor elektronik 45mmDanMotor batas mekanik presisi. Ketika pengguna mengklik motor untuk mempelajari lebih lanjut, jendela anak terbuka.
Anda dapat menggunakan DOM Access (jika memungkinkan) untuk memperbarui jumlah tampilan halaman utama untuk produk itu. Atau, jika jendela anak memiliki tombol "Tambahkan ke Keranjang", Anda dapat menggunakan akses untuk memperbarui ikon CART di halaman utama.


Jika Cross - Origin adalah masalah, Anda masih dapat menggunakan API postmessage. Misalnya, jendela anak dapat mengirim pesan ke halaman utama yang mengatakan bahwa suatu produk telah ditambahkan ke keranjang. Halaman utama kemudian dapat memperbarui jumlah kereta dan menampilkan pesan konfirmasi.
Intinya
Jadi, dapatkah Anda mengakses DOM pembuka jendela dari jendela anak? Itu tergantung pada kebijakan asal yang sama. Jika asalnya sama, Anda dapat menggunakanwindow.openerobjek untuk mengakses DOM. Jika tidak, Anda harus menggunakan API postmessage untuk berkomunikasi di antara jendela.
Sebagai pemasok pembuka jendela, memahami konsep -konsep ini dapat membantu Anda membuat pengalaman pengguna yang lebih baik di situs web Anda. Apakah itu memberikan informasi produk yang lebih rinci atau merampingkan proses belanja, dapat berinteraksi di antara jendela yang berbeda dapat membuat perbedaan besar.
Jika Anda berada di pasar untuk pembuka jendela berkualitas tinggi, motor, atau sakelar, dan Anda ingin tahu lebih banyak tentang bagaimana produk kami dapat masuk ke dalam proyek Anda, kami ingin mengobrol. Jangkau kami untuk memulai diskusi pengadaan, dan mari kita bekerja sama untuk menemukan solusi terbaik untuk kebutuhan Anda.
Referensi
- MDN Web Docs - Sama - Kebijakan Asal
- MDN Web Docs - Window.PostMessage ()
- W3Schools - Objek Jendela JavaScript
