Hei ada! Saya seorang pembekal pembuka tingkap, dan saya sering bertanya beberapa soalan menarik mengenai bahagian teknikal perkara. Satu soalan yang muncul agak sedikit ialah, "Bolehkah saya mengakses DOM pembuka tetingkap dari tingkap kanak -kanak?" Mari menyelam topik ini dan lihat apa yang berlaku.
Mula -mula, mari kita jelaskan apa itu DOM. Model Objek Dokumen, atau DOM untuk pendek, adalah seperti perwakilan pokok - berstruktur semua elemen di laman web. Ia membolehkan JavaScript berinteraksi dengan unsur -unsur ini, mengubah gaya, kandungan, dan sebagainya. Sekarang, apabila kita bercakap tentang pembuka tetingkap dan tetingkap kanak -kanak, kita biasanya berurusan dengan senario di mana satu laman web membuka yang lain.
Bayangkan anda berada di halaman utama (pembuka tetingkap) dan anda mengklik butang yang membuka tab atau tetingkap baru (tetingkap kanak -kanak). Persoalannya, bolehkah tingkap kanak -kanak menjangkau dan kekacauan dengan dom halaman utama? Nah, jawapannya tidak mudah ya atau tidak.
Dasar asal yang sama
Peraturan besar di sini adalah dasar asal yang sama. Ini adalah langkah keselamatan dalam pelayar web yang menyekat halaman daripada mengakses DOM halaman lain jika mereka mempunyai asal -usul yang berbeza. Asal pada dasarnya adalah gabungan protokol (seperti HTTP atau HTTPS), domain (misalnya, www.example.com), dan nombor port.
Jika pembuka tetingkap dan tetingkap kanak -kanak mempunyai asal yang sama, perkara menjadi lebih fleksibel. Sebagai contoh, jika anda membuka tetingkap baru dari laman web anda sendiri, tetingkap kanak -kanak boleh mengakses DOM tetingkap pembuka. Anda boleh menggunakanWindow.Openerobjek dalam JavaScript untuk melakukan ini. Inilah contoh mudah:
// dalam tetingkap kanak -kanak jika (window.Opener) {var OpenerDocument = window.Opener.document; // Sekarang anda boleh mengakses elemen dalam dokumen pembuka var someelement = openerDocument.getElementById ('some - id'); jika (someelement) {someelement.style.color = 'Red'; }}
Tetapi jika asal -usulnya berbeza, pelayar akan menyekat akses. Ini adalah untuk mengelakkan laman web yang berniat jahat daripada mencuri maklumat sensitif dari laman web lain. Contohnya, jika anda membuka tetingkap kanak -kanak dari tapak E - Perdagangan anda ke Gateway Pembayaran Pihak yang ketiga, tetingkap Gateway Pembayaran tidak dapat mengakses DOM tapak E - Commerce anda.
Mengapa anda mahu mengakses DOM pembuka tetingkap?
Sebagai pembekal pembuka tingkap, saya boleh memikirkan beberapa sebab mengapa seseorang mungkin mahu melakukan ini. Katakan anda mempunyai katalog produk di halaman utama anda, dan apabila pengguna mengklik pada produk, ia membuka tetingkap kanak -kanak dengan maklumat yang lebih terperinci. Anda mungkin mahu tetingkap kanak -kanak mengemas kini DOM halaman utama untuk menunjukkan bahawa produk telah dilihat atau menambahnya ke senarai "baru -baru ini dilihat".
Kes penggunaan lain boleh dalam alat konfigurasi. Anda membuka tetingkap kanak -kanak untuk mengkonfigurasi produk pembuka tetingkap, sepertiSuis buta bermotor. Sebaik sahaja pengguna menyelesaikan konfigurasi dalam tetingkap kanak -kanak, anda boleh menggunakan akses ke DOM pembuka tetingkap untuk mengemas kini halaman utama dengan pilihan konfigurasi yang dipilih.
Mengendalikan situasi asal
Sekiranya anda perlu mengakses DOM pembuka tetingkap dalam situasi asal silang, terdapat beberapa penyelesaian. Satu pilihan ialah menggunakan API Postmessage. Ini membolehkan Windows dengan asal -usul yang berbeza untuk berkomunikasi dengan cara yang selamat.
Idea asas ialah satu tetingkap boleh menghantar mesej ke tetingkap lain menggunakanPostmessagekaedah, dan tetingkap penerimaan boleh mendengar mesej ini menggunakanwindow.addeventListener ('mesej', panggil balik)peristiwa.
Inilah cara ia berfungsi:
// Dalam tetingkap kanak -kanak var targetOrigin = 'https://www.example.com'; window.Opener.PostMessage ('Beberapa data dari tetingkap kanak -kanak', TargetOrigin); // dalam tetingkap tetingkap tetingkap.addeventListener ('mesej', fungsi (event) {if (event.origin === 'https: // child - window - domain.com') {console.log ('mesej yang diterima:', event.data);}});
Dengan cara ini, anda boleh menukar data antara kedua -dua tingkap tanpa mengakses DOM secara langsung, yang disekat oleh dasar asal yang sama.
REAL - Contoh Dunia dalam Perniagaan Pembuka Tingkap
Mari kita bercakap tentang beberapa senario dunia sebenar dalam perniagaan pembuka tingkap. Katakan anda mempunyai halaman utama yang menyenaraikan pelbagai jenis pembuka tetingkap, sepertiMotor elektronik 45mmdanMotor had mekanikal ketepatan. Apabila pengguna mengklik pada motor untuk mengetahui lebih lanjut, tetingkap kanak -kanak dibuka.
Anda boleh menggunakan akses DOM (jika boleh) untuk mengemas kini kiraan paparan halaman utama untuk produk tersebut. Atau, jika tetingkap kanak -kanak mempunyai butang "Tambah ke Cart", anda boleh menggunakan akses untuk mengemas kini ikon kereta pada halaman utama.


Jika salib - asal adalah isu, anda masih boleh menggunakan API Postmessage. Sebagai contoh, tetingkap kanak -kanak boleh menghantar mesej ke halaman utama yang mengatakan bahawa produk telah ditambah ke kereta. Halaman utama kemudian boleh mengemas kini kiraan kereta dan menunjukkan mesej pengesahan.
Garis bawah
Jadi, bolehkah anda mengakses DOM pembuka tetingkap dari tetingkap kanak -kanak? Ia bergantung kepada dasar asal yang sama. Sekiranya asal usulnya, anda boleh menggunakanWindow.Openerobjek untuk mengakses DOM. Jika tidak, anda perlu menggunakan API Postmessage untuk berkomunikasi antara tingkap.
Sebagai pembekal pembuka tetingkap, memahami konsep -konsep ini dapat membantu anda membuat pengalaman pengguna yang lebih baik di laman web anda. Sama ada ia memberikan maklumat produk yang lebih terperinci atau menyelaraskan proses membeli -belah, dapat berinteraksi antara tingkap yang berbeza boleh membuat perbezaan yang besar.
Sekiranya anda berada di pasaran untuk pembuka tetingkap berkualiti tinggi, motor, atau suis, dan anda ingin mengetahui lebih lanjut mengenai bagaimana produk kami boleh dimuatkan ke dalam projek anda, kami ingin bersembang. Jangkau kami untuk memulakan perbincangan perolehan, dan mari bekerjasama untuk mencari penyelesaian terbaik untuk keperluan anda.
Rujukan
- Dokumen Web MDN - Sama - Dasar Asal
- MDN Web Docs - Window.PostMessage ()
- W3Schools - Objek Tetingkap JavaScript
