Beberapa waktu yang lalu, saya perlu mendapatkan sumber halaman melalui JavaScript. Operasi ini sangat sederhana. Anda bisa mendapatkannya dengan menggunakan Document.referrer. Namun, masih ada banyak situasi yang tidak terduga dalam aplikasi yang sebenarnya, jadi mari kita urutkan secara singkat di sini.
Masalah pertama yang saya temui adalah bahwa setelah pergi dari halaman HTTPS ke halaman HTTP, nilai dokumen. Referrer kosong. Untuk alasan keamanan, beberapa halaman penting dari banyak situs web (seperti halaman login Taobao) menggunakan protokol HTTPS. Jika pengguna yang tidak masuk klik pada tautan ke halaman B (halaman http) di halaman A (halaman http), tetapi halaman B mengharuskan pengguna untuk masuk, jadi ia melompat ke halaman login (halaman https), dan kemudian melompat ke kembali ke b. Referrer, jika ada halaman HTTP dan halaman HTTPS di jalur, maka jalur akan rusak dari HTTPS ke HTTP.
Akar masalah ini adalah kebijakan keamanan browser, dan tampaknya tidak ada solusi yang baik untuk mengandalkan JavaScript saja. Gagasan bundaran adalah menggunakan window.name, tulis URL halaman saat ini ke window.name di halaman https, dan kemudian baca di halaman berikutnya (halaman http).
Selain situasi ini, dapatkah dokumen. Saya mencari dan menemukan bahwa seseorang telah menyusun daftar di sini, tetapi itu tidak terlalu lengkap, seperti kasus IE6 yang tidak termasuk. Jadi saya melakukannya sendiri, menginstal N browser di mesin virtual, dan menguji semua situasi (itu benar -benar pekerjaan fisik), dan hasilnya ditunjukkan pada tabel di bawah ini:
| beroperasi | IE6 | IE7 | IE8 | IE9 | Firefox | Chrome | Opera | Safari |
|---|---|---|---|---|---|---|---|---|
| Masukkan URL secara langsung di bilah alamat | "" | "" | "" | "" | "" | "" | "" | "" |
| Akses URL dari Bookmark | "" | "" | "" | "" | "" | "" | "" | "" |
| Klik hyperlink dari halaman A dan lompat ke halaman B (target = "_ self") | √ | √ | √ | √ | √ | √ | √ | √ |
| Klik hyperlink dari halaman A dan lompat ke halaman B (target = "_ blank") | √ | √ | √ | √ | √ | √ | √ | √ |
| Klik kanan hyperlink dari halaman A dan buka halaman B di tab baru | - | √ | √ | √ | √ | √ | √ | "" |
| Klik kanan hyperlink dari halaman A dan buka halaman B di jendela baru | √ | √ | √ | √ | √ | √ | √ | "" |
| Seret tautan ke bilah alamat | "" | Tidak dapat menyeret | Tidak dapat menyeret | "" | "" | "" | "" | "" |
| Seret tautan ke bilah tab | - | "" | "" | "" | "" | "" | "" | "" |
| Gunakan tombol maju dan belakang browser | √ | √ | √ | √ | √ | √ | √ | √ |
| JS memodifikasi lokasi.href | "" | "" | "" | √ | √ | √ | √ | √ |
| JS menggunakan window.open | "" | "" | "" | "" | √ | √ | √ | √ |
| Pengalihan server (lompatan 302) | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya | Menargetkan halaman sebelumnya |
| Halaman Meta Refresh | "" | "" | "" | "" | "" | Putar Halaman | Putar Halaman | Putar Halaman |
"√" dalam tabel di atas berarti bahwa pengirim dapat diambil secara normal, "" berarti bahwa pengirimnya kosong.
Kecuali untuk IE, browser lain adalah versi terbaru yang dapat diunduh di situs web resmi. Di antara mereka, Safari menguji versi Windows dan versi Mac, dan kesimpulannya sama.
Ada juga beberapa kasus di mana tidak ada tes yang telah dilakukan, seperti apakah pengirim dapat dipertahankan di bawah setiap browser saat mengklik Flash untuk melompat.
Sebagian besar situasi dalam tabel di atas sejalan dengan harapan, tetapi tampaknya ada beberapa hal yang harus diperhatikan:
1. Di Safari, klik kanan untuk membuka tautan akan menyebabkan penipu hilang;
2. Di IE, memodifikasi lokasi.
3. Saat menggunakan Meta Jump, pengirim akan hilang di bawah IE/Firefox.
Akhirnya, kesimpulan sederhana adalah: jika Anda perlu mengakses sumber melalui dokumen. Halaman koleksi Referrer, sebaiknya tidak menggunakan JS untuk melompat atau membuka jendela baru, atau menggunakan meta untuk melompat.