Artikel ini menjelaskan metode JS untuk mencegah halaman web tertanam dalam kerangka kerja iframe. Bagikan untuk referensi Anda, sebagai berikut:
Misalnya:
<script type = "text/javascript"> if (window! = top) // Tentukan apakah objek jendela saat ini adalah objek atas top.location.href = window.location.href; // Jika tidak, secara otomatis mengarahkan URL objek teratas ke URL yang tertanam di halaman web </script>
Kode ini valid. Namun, ada masalah: Setelah menggunakannya, tidak ada yang bisa menyematkan halaman web Anda ke dalam kerangka kerja, termasuk Anda.
Jadi, hari ini saya mempertimbangkan apakah ada cara untuk membuat halaman web saya hanya tertanam dalam kerangka kerja saya sendiri, bukan kerangka kerja orang lain?
Di permukaan, pertanyaan ini sangat sederhana. Jadikan penilaian: Apakah nama domain dari kerangka kerja saat ini dan kerangka kerja tingkat atas adalah sama, dan jika jawabannya tidak, pengalihan URL dilakukan.
if (top.location.hostname! = window.location.hostname) {top.location.href = window.location.href;}Namun, secara tak terduga, tulisan ini salah dan tidak dapat dijalankan sama sekali. Bisakah Anda melihat di mana kesalahannya?
Asumsikan bahwa top.location.hostname adalah www.111.com, dan window.location.hostname adalah www.222.com. Artinya, 111.com menanamkan 222.com ke halaman webnya. Saat ini, apa yang akan terjadi jika Anda membandingkan top.location.hostname! = Window.location.hostname?
Browser akan meminta kesalahan kode!
Karena mereka adalah domain silang, kebijakan keamanan browser tidak mengizinkan halaman web 222.com untuk mengoperasikan halaman web 111.com, dan sebaliknya. IE menyebut kesalahan ini "tidak ada izin". Selain itu, browser bahkan tidak memungkinkan Anda untuk melihat top.location.hostname. Dalam kasus lintas domain, Anda akan secara langsung melaporkan kesalahan segera setelah Anda melihat objek ini.
Jadi, bagaimana seharusnya kode dimodifikasi?
Bahkan, ini mendorong kami untuk hanya memeriksa apakah top.location.hostname dilaporkan sebagai kesalahan. Jika kesalahan dilaporkan, itu menunjukkan bahwa ada domain silang, dan objek atas akan dialihkan; Jika kesalahan dilaporkan, ini menunjukkan bahwa tidak ada domain silang (atau kerangka kerja tidak digunakan), maka tidak ada tindakan yang akan diambil.
coba {top.location.hostname;} catch (e) {top.location.href = window.location.href;}Ini ditulis dengan benar dan dapat dijalankan dengan benar di IE dan Firefox. Namun, Chrome akan mengalami kesalahan. Untuk beberapa alasan, dalam situasi domain lintas, Chrome tidak melaporkan kesalahan ke top.location.hostname!
Tidak mungkin, saya hanya bisa menambahkan sepotong kode tambahan lain untuk Chrome.
coba {top.location.hostname; if (top.location.hostname! = window.location.hostname) {top.location.href = window.location.href; }} catch (e) {top.location.href = window.location.href;}Oke, kode versi yang ditingkatkan selesai. Kecuali untuk nama domain lokal, tidak ada nama domain lain yang dapat menanamkan halaman web Anda ke dalam kerangka kerja.
Untuk informasi lebih lanjut tentang konten terkait JavaScript, silakan periksa topik -topik situs ini: "Ringkasan Operasi JavaScript iframe Skills", "Ringkasan Keterampilan Operasi Array JavaScript", "Ringkasan JavaScript Matematika Penggunaan Operasi", "Ringkasan Struktur Data Javascript dan Keterampilan Algoritma", "Ringkasan Javascript Struktur Javascript" Javascript "Cering" Javascript "Ringkasan Javascript" Ringkasan Javascript "Ringkasan Javascript" Keterampilan "," Ringkasan Efek dan Keterampilan Khusus Animasi JavaScript "," Ringkasan Kesalahan Javascript dan Keterampilan Debugging "dan" Ringkasan Algoritma dan Keterampilan Traversal JavaScript "
Saya harap artikel ini akan membantu pemrograman JavaScript semua orang.