Rumah > Artikel > hujung hadapan web > Document.referrer dalam keputusan ujian JavaScript dalam pelbagai pelayar_Pengetahuan asas
Beberapa masa lalu, kami perlu mendapatkan sumber halaman melalui JavaScript. Anda boleh mendapatkannya dengan menggunakan document.referrer. Walau bagaimanapun, masih terdapat banyak situasi yang tidak dijangka dalam aplikasi praktikal, yang diringkaskan secara ringkas di sini.
Masalah pertama yang dihadapi ialah selepas bertukar daripada halaman HTTPS ke halaman HTTP, nilai document.referrer kosong. Atas sebab keselamatan, beberapa halaman penting bagi banyak tapak web (seperti halaman log masuk Taobao) menggunakan protokol HTTPS. Jika pengguna yang tidak log masuk mengklik pautan ke halaman B (halaman HTTP) pada halaman A (halaman HTTP), tetapi halaman B memerlukan pengguna untuk log masuk, ia akan melompat ke halaman log masuk (halaman HTTPS) terlebih dahulu dan kemudian lompat kembali ke B selepas log masuk selesai ( halaman HTTP), maka anda akan mendapati document.referrer tidak boleh diperolehi di halaman B. Dalam erti kata lain, jika anda ingin memulihkan laluan akses pengguna berdasarkan perujuk, jika terdapat halaman HTTP dan halaman HTTPS dalam laluan, maka laluan akan dipecahkan dari HTTPS ke HTTP.
Punca masalah ini ialah dasar keselamatan penyemak imbas nampaknya tiada penyelesaian yang baik menggunakan JavaScript sahaja. Idea bulatan ialah menggunakan window.name, tulis URL halaman semasa ke window.name pada halaman HTTPS, dan kemudian baca pada halaman seterusnya (halaman HTTP).
Kecuali situasi ini, bolehkah document.referrer diperolehi seperti biasa apabila melompat ke halaman lain? Saya mencari dan mendapati di sini bahawa seseorang telah menyusun senarai, tetapi ia tidak menyeluruh, contohnya, ia tidak termasuk IE6 yang hampir mati. Jadi saya melakukannya sendiri, memasang N pelayar dalam mesin maya, dan menguji pelbagai situasi (ini benar-benar kerja fizikal. Hasilnya ditunjukkan dalam jadual di bawah:
).
操作 | IE6 | IE7 | IE8 | IE9 | Firefox | Chrome | Opera | Safari |
---|---|---|---|---|---|---|---|---|
直接在地址栏输入URL | “” | “” | “” | “” | “” | “” | “” | “” |
从书签访问URL | “” | “” | “” | “” | “” | “” | “” | “” |
从页面A点击超链接,跳转到页面B(target=”_self”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A点击超链接,跳转到页面B(target=”_blank”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A右键单击超链接,在新标签页中打开页面B | - | √ | √ | √ | √ | √ | √ | “” |
从页面A右键单击超链接,在新窗口中打开页面B | √ | √ | √ | √ | √ | √ | √ | “” |
拖动链接到地址栏 | “” | 无法拖动 | 无法拖动 | “” | “” | “” | “” | “” |
拖动链接到标签栏 | - | “” | “” | “” | “” | “” | “” | “” |
使用浏览器的前进、后退按钮 | √ | √ | √ | √ | √ | √ | √ | √ |
JS 修改 location.href | “” | “” | “” | √ | √ | √ | √ | √ |
JS 使用 window.open | “” | “” | “” | “” | √ | √ | √ | √ |
服务器重定向(302跳转) | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 |
页面 Meta Refresh | “” | “” | “” | “” | “” | 转向页 | 转向页 | 转向页 |
"√" dalam jadual di atas bermaksud perujuk boleh diperolehi seperti biasa, "" bermaksud perujuk kosong.
Kecuali IE, semua pelayar lain adalah versi terkini yang boleh dimuat turun dari tapak web rasmi Safari menguji kedua-dua versi Windows dan versi Mac, dan kesimpulannya adalah sama.
Terdapat juga beberapa situasi yang belum diuji, seperti sama ada perujuk boleh dikekalkan dalam setiap pelayar apabila mengklik Flash untuk melompat.
Kebanyakan situasi dalam jadual di atas adalah selaras dengan jangkaan, tetapi nampaknya terdapat beberapa perkara yang perlu diberi perhatian:
1. Dalam Safari, apabila anda mengklik kanan untuk membuka pautan, perujuk akan hilang
2. Dalam IE, perujuk akan hilang apabila mengubah suai location.href atau menggunakan window.open untuk membuka halaman (IE 9 adalah pengecualian, menggunakan location.href untuk melompat tidak akan kehilangan perujuk);
3. Apabila menggunakan meta jump, perujuk akan hilang di bawah IE/Firefox.