Sebelum membaca:
Sebelum membaca konten spesifik artikel, saya harap Anda dapat membuka IE8 terlebih dahulu, buka http://www.taobao.com , lalu masukkan di bilah alamat:
javascript:alert(document.documentMode +navigator.userAgent);void(0)
Saya tidak tahu apakah Anda terkejut setelah melihat hasilnya. Lagi pula, menurut saya ini sangat aneh, karena tidak ada tag kompatibilitas di meta halaman, dan tidak ada tag Kompatibel X-UA di header http saat fiddler memeriksanya. itu.Mengapa situs web berjalan dalam mode IE7 ?
Mode kompatibilitas IE7 dan tampilan kompatibilitas
Kemarin ketika saya membaca artikel tentang iframe yang sangat adaptif di Word of Mouth, saya menemukan bahwa demo yang diberikannya berbeda dengan demo saya di IE8. Hasil online-nya jelas sama dengan di IETester7. Saya juga memeriksanya dan ada tidak ada tanda kompatibilitas di meta. , fiddler memeriksa bahwa tidak ada tanda Kompatibel X-UA di header http, tetapi mengapa hasil online berbeda dengan hasil lokal? Hal ini membuat saya tertekan. Setelah melihatnya lagi, saya menemukan bahwa demo online tidak menampilkan tombol "Tampilan Kompatibilitas" di IE8.
Belakangan saya menemukan artikel Just The Facts: Recap of Compatibility View. Meski tidak menyelesaikan masalah, isinya bagus.
Tampilan Kompatibilitas dan tag Kompatibel X-UA tidak setara
Tampilan Kompatibilitas adalah sesuatu yang Anda lakukan pada klien. Ini memengaruhi tiga hal: string Agen Pengguna, Vektor Versi (digunakan dalam evaluasi komentar bersyarat), dan mode apa yang dipetakan oleh DOCTYPE Standar – Standar IE8 atau Standar IE7 -Tag / header <META> yang Kompatibel dengan UA adalah sesuatu yang Anda gunakan di konten halaman / sisi server dan, jika ada, sepenuhnya mengesampingkan pengaturan Tampilan Kompatibilitas pada klien. Ini memengaruhi dua hal: Vektor Versi dan mode DOCTYPE yang memicu Standar dipetakan ke. Itu tidak dapat memengaruhi string UA karena sudah terlambat untuk mengubahnya – klien sudah membuat permintaan GET ke server (dan ini berisi string UA). Artinya bagi pengembang adalah jika situs Anda berputar pada string Agen Pengguna, menambahkan hanya tag Kompatibel X-UA (untuk menyebabkan IE8 menampilkan situs Anda dalam mode Standar IE7) tidak akan membuat situs web Anda kompatibel – Anda juga harus memperbarui logika deteksi string Agen Pengguna Anda sebagai Sehat.
Artinya, tampilan kompatibilitas memainkan tiga peran:
Tag meta hanya memainkan dua peran: 1. Versi, 2. Jenis dokumen
(Di sini dikatakan bahwa meta tag tidak mempengaruhi UserAgent. Seharusnya mengacu pada ua di sisi server. Karena permintaan klien telah dikirim dan berisi ua, maka tidak akan terpengaruh. Namun, ua klien masih ada terpengaruh, dan ie7 ditampilkan.)
benar:
(Mungkin pengujian sebelumnya salah) ua klien tidak akan terpengaruh, hanya akan memengaruhi document.documentMode
Selain itu:
Tag / header <META> masing-masing mengacu pada: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> dan menambahkan header http di sisi server, seperti di file konfigurasi .net:
Selain itu, Anda juga dapat menambahkan header http ke IIS atau Apache:
pemecahan masalah
Sampai di sini, masalah di awal artikel masih belum terselesaikan. Tadi malam, saya tidak sengaja melihat artikel Qin Ge tentang penggunaan doctype untuk mengaktifkan mode browser , Disebutkan bahwa mode kompatibilitas juga akan diaktifkan di daftar situs daftar hitam Microsoft Ingat artikel di atas Salah satu dari dua komentar adalah: res://iecompat.dll/iecompatdata.xml (khusus IE8). Masukkan alamat ini ke IE8 dan akan ditampilkan: Daftar Tampilan Kompatibilitas nama Koubei dan Taobao dalam daftar ini, jadi menurut saya ini harus menjadi jawaban atas pertanyaan di awal artikel ini. Anda juga dapat menemukan nama domain di daftar ini, membukanya, dan memasukkan javascript di awal artikel di bilah alamat (ps: Microsoft memiliki terlalu banyak daftar), mengubah begitu banyak situs menjadi IE7.
<konfigurasi>
<sistem.webServer>
<httpProtokol>
<customHeader>
<hapus />
<tambahkan nama="Kompatibel dengan X-UA" value="IE=EmulateIE7" />
</customHeader>
</httpProtokol>
</sistem.webServer>
</konfigurasi>