Mengapa IE9 beralih ke mode kompatibilitas di situs web saya?

197

Saya baru saja menginstal IE9 beta dan di situs tertentu yang saya buat (HTML5) IE9 melompat ke mode kompatibilitas kecuali saya secara manual mengatakannya untuk tidak melakukannya. Saya telah mencoba menghapus beberapa bagian situs web tetapi tidak ada perubahan. Termasuk menghapus semua CSS yang disertakan. Di beberapa situs web lain dari saya itu berjalan dengan baik

Juga, jangan atur secara manual karena IE9 akan mengingat pengaturan pengguna dan Anda tidak dapat mengubahnya kembali menjadi otomatis (atau setidaknya saya belum menemukan caranya, bahkan melalui penelusuran pribadi dan mengosongkan cache)

Bagaimanapun. Situs di mana ia beralih ke mode kompatibilitas: http://alliancesatwar.com/guide/
Satu di mana ia membuat benar: http://geuze.name/basement/ (Saya tidak dapat memposting lebih dari 1 hyperlink)

Keduanya menggunakan sama doctypedan semua. Situs-situs tersebut memiliki banyak kesamaan (terlepas dari penampilan) menggunakan templat dasar yang sama (penyandian, tag meta, doctype dan javascript yang sama)

Akan lebih bagus jika seseorang memiliki jawaban untuk saya! Situs web HTML5 yang merender dalam mode IE7 cukup ... lumpuh.

René
sumber
5
Tolong jelaskan "beralih ke mode kompatibilitas"? Jika Anda melihat halaman refresh dan balon yang mengatakan bahwa IE telah me-refresh halaman ini dalam Tampilan Kompatibilitas karena masalah, ini berarti Anda telah menemukan bug IE yang disebut "hard assert" yang mirip dengan kerusakan pada mesin rendering . Kami tertarik untuk menemukan dan memperbaiki ini; silakan ajukan bug di connect.microsoft.com/ie . Terima kasih!
EricLaw

Jawaban:

263

Bekerja di IE9 documentMode untuk saya.

Tanpa X-UA-Compatibleheader / meta untuk mengatur mode dokumen yang eksplisit, Anda akan mendapatkan mode berdasarkan:

  • apakah pengguna telah mengklik tombol 'kompatibilitas tampilan' di domain itu sebelumnya;
  • mungkin juga apakah ini telah terjadi secara otomatis karena beberapa konten lain di situs tersebut menyebabkan perender IE8 / 9 mogok dan jatuh kembali ke perender lama;
  • apakah pengguna telah memilih untuk menempatkan semua situs dalam tampilan kompatibilitas secara default;
  • apakah IE menganggap situs tersebut ada di intranet Anda dan default untuk tampilan kompatibilitas;
  • apakah situs tersebut dalam daftar situs web Microsoft sendiri yang memerlukan tampilan kompatibilitas.

Anda dapat mengubah pengaturan ini dari 'Alat -> Pengaturan tampilan kompatibilitas' dari menu IE. Tentu saja menu itu sekarang tersembunyi secara tersembunyi, sehingga Anda tidak akan melihatnya sampai Anda menekan Alt.

Sebagai penulis situs, jika Anda yakin bahwa situs Anda memenuhi standar (ditampilkan dengan baik di peramban lain, dan menggunakan fitur-sniffing untuk memutuskan solusi browser apa yang akan digunakan), saya sarankan menggunakan:

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

atau tajuk HTTP:

X-UA-Compatible: IE=Edge

untuk mendapatkan renderer terbaru apa pun versi IE yang digunakan.

bobince
sumber
79
Catatan penting: jika IE 9 dikonfigurasi untuk selalu menampilkan situs Intranet dalam mode kompatibilitas, baik meta tag maupun header HTTP tidak akan menimpanya.
Yakub
29
Seperti yang disebutkan Jacob, IE dapat secara default menampilkan semua situs lokal / intranet dalam mode compat. Tekan alt -> Pengaturan Tampilan Kompatibilitas Alat, dan pastikan Anda tidak mencentang kotaknya.
Cory Mawhorter
30
Tag meta hanya berfungsi untuk saya ketika saya meletakkannya tepat setelah <head> (lihat juga jawabannya di bawah). Ketika saya meletakkannya lebih jauh di dalam elemen <head>, itu tidak berhasil (saya masih mendapatkan halaman yang sobek).
Boris van Schooten
13
@ Jacob: Itu agak menyesatkan. Ya, Anda akan berada dalam Mode Browser yang kompatibel dan tidak ada jalan keluar. Tetapi Anda masih dapat menggunakan header HTTP untuk mengatur Mode Dokumen ke versi IE mana yang terbaik untuk situs Anda. IE = Edge harus selalu memberi Anda mesin rendering terbaru. Jadi, meskipun Anda secara teknis dalam mode kompatibilitas, halaman Anda dapat dirender seolah-olah dalam mode normal. Perbaiki saya jika saya salah tetapi setidak-tidaknya situs Intranet kami berfungsi persis seperti ini (bahkan dengan pengaturan "Tampilkan situs intranet dalam tampilan kompatibilitas").
mkataja
7
@ BorisvanSchooten: Saya tidak tahu apakah ini alasannya, tetapi <meta>tag harus berada dalam 512 byte pertama dari file HTML yang diproses. Saya katakan "diproses" karena Anda dapat memiliki semua jenis PHP di sana, tetapi kode yang diberikan adalah yang penting. Saya sudah sampai di tempat saya meletakkan semua komentar saya di <meta>bawah <meta>tag, sehingga saya tidak melanggar persyaratan.
doubleJ
33

Saya menempatkan

<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>

Hal pertama setelah itu

<head>

(Saya membacanya di suatu tempat, saya tidak ingat)

Aku tidak percaya itu berhasil !!

pkario
sumber
Anda harus menutup tab dan membuka tab baru, apakah Anda mencobanya?
Zeb
1
Dia mengatakan "tidak" tidak ";)
Nathan JB
14
+1, ini adalah catatan yang sangat berharga . Jika Anda memiliki <script>bagian dalam <head>sebelum metapernyataan ini , itu (IE = edge) akan diabaikan.
jakub.g
22

Untuk memaksa IE merender dalam mode standar IE9 yang harus Anda gunakan

<meta http-equiv="X-UA-Compatible" content="IE=edge">

Beberapa kondisi dapat menyebabkan IE9 beralih ke mode kompatibilitas. Secara default ini dapat terjadi di situs intranet.

Delan Azabani
sumber
Ini berfungsi di situs web lain. Jadi tidak seharusnya begitu. Juga, meta-tag itu jahat karena Anda harus memperbarui secara manual setiap kali ada versi IE baru.
René
2
Maaf saya tidak dapat memperbaiki masalah Anda. Namun, saya telah mengedit jawaban saya untuk digunakan IE=edgesebagai gantinya, yang selalu meminta penggunaan mesin terbaru yang tersedia.
Delan Azabani
Asumsi Anda salah. Demo menentukan X-UA-Compatible untuk mencegah IE menampilkan tombol Tampilan Kompatibilitas karena jika pengguna mendorongnya, konten situs tidak akan berfungsi dengan benar.
EricLaw
@ReneGeuze, Anda salah. Edge selalu merujuk ke versi terbaru IE.
neoswf
@DelanAzabani portal intranet saya beralih ke mode kompatibilitas bahkan saya menambahkan meta tag seperti yang Anda sarankan. tolong sarankan bagaimana itu bisa menyelesaikan dan tetap pada contoh mode standar - IE 8, IE 8 comapitibility maka saya ingin IE 8 saja.
dsi
6

Saya telah memposting komentar ini pada utas StackOverflow terpisah, tetapi saya pikir itu layak untuk diulang di sini:

Untuk aplikasi ASP.Net internal kami, menambahkan tag "Kompatibel-X-UA" di halaman web, di web.config, atau di belakang kode sama sekali tidak membuat perbedaan.

Satu- satunya hal yang berhasil bagi kami adalah mematikan pengaturan ini secara manual di IE8:

masukkan deskripsi gambar di sini

(Mendesah.)

Masalah ini tampaknya hanya terjadi dengan IE8 & IE9 di situs intranet. Situs web eksternal akan berfungsi dengan baik dan menggunakan versi IE8 / 9 yang benar, tetapi untuk situs web internal, IE9 tiba-tiba memutuskan itu sebenarnya IE7, dan tidak memiliki dukungan HTML 5.

Tidak, saya juga tidak mengerti logika ini.

Solusi enggan saya adalah menguji apakah browser memiliki dukungan HTML 5 (dengan membuat kanvas, dan menguji apakah itu valid), dan menampilkan pesan ini kepada pengguna jika tidak valid:

masukkan deskripsi gambar di sini

Ini tidak terlalu ramah pengguna, tetapi membuat pengguna mematikan pengaturan yang mengganggu ini tampaknya menjadi satu-satunya cara untuk membiarkan mereka menjalankan aplikasi web HTML 5 internal dengan benar.

Atau suruh pengguna menggunakan Chrome. ;-)

Mike Gledhill
sumber
1

Situs di http://www.HTML-5.com/index.html memang memiliki meta tag yang Kompatibel dengan X-UA tetapi masih masuk ke Tampilan Kompatibilitas seperti yang ditunjukkan oleh ikon "halaman sobek" di bilah alamat. Bagaimana Anda mendapatkan opsi menu untuk memaksa IE 9 (Versi Final 9.0.8112.16421) untuk membuat halaman dalam Mode Standar? Saya mencoba mengklik kanan ikon halaman yang sobek itu serta trik tombol "Alt" untuk menampilkan opsi menu tambahan yang disebutkan oleh Rene Geuze, tetapi itu tidak berhasil.

Rob di TVSeries.com
sumber
4
Hapus komentar bersyarat IE di sekitar meta. Anda melayani halaman sebagai application/xhtml+xml, jadi aturan parsing XML digunakan; XML tidak mendukung komentar bersyarat. Bagaimanapun itu tidak masuk akal; browser harus memilih mode sebelum dapat memutuskan komentar kondisional apa yang akan ditafsirkan.
bobince
1

Sebagai tambahan di situs web yang lebih modern, jika Anda menggunakan pernyataan kondisional pada tag html Anda sesuai boilerplate, ini akan karena beberapa alasan menyebabkan IE9 ke default ke mode kompatibilitas. Cara mengatasinya di sini adalah memindahkan pernyataan kondisional Anda dari tag html dan menambahkannya ke tag tubuh, dengan kata lain keluar dari bagian kepala. Dengan begitu Anda masih bisa menggunakan kelas-kelas itu di style sheet Anda untuk menargetkan browser yang lebih lama.

uknowit2
sumber
0

Terlihat baik untuk saya:

teks alternatif

Anda yakin tidak ada di pengaturan global atau apa? Ini adalah instalasi beta yang bersih pada Windows 7. Alat pengembang melaporkan bahwa halaman default ke Mode Standar IE9.

Yi Jiang
sumber
Saya memiliki lebih dari 1 laporan tentang kesalahan ini. Meskipun mungkin itu ada hubungannya dengan dir base ( alliancesatwar.com ) yang menjadikan semua sub- dir dalam mode kompatibilitas juga. Tapi kemudian saya punya pertanyaan, apa yang di root dari situs web membuat IE membuat situs web dalam mode kompatibilitas? Jadi mungkin setidaknya panduan ini dikodekan dengan benar. Saya harap begitu.
René
@Rene Strange, saya baru saja mereproduksinya, dengan mengklik tautan Panduan dari beranda. Tapi ini hanya terjadi sekali, dan setelah beberapa upaya saya belum mereproduksi ini, hanya sekali saja
Yi Jiang
0

Saya baru-baru ini harus menyelesaikan masalah ini dan inilah yang saya lakukan:

Pertama-tama, solusi ini ada di sekitar tuning server Apache.

Pemikir utama kedua adalah bahwa ada bug di IE9 yang berarti bahwa tag meta tidak akan berfungsi, alih-alih solusi ini coba ini

  • temukan / buka httpd.conf Anda
  • batalkan komentar / atau tambahkan baris berikut

    LoadModule headers_module modules/mod_headers.so
  • tambahkan baris berikut

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • simpan / mulai ulang server Apache Anda,

  • browse ke halaman Anda dengan IE9, gunakan alat seperti wireshark atau fiddler atau gunakan alat pengembang IE untuk memeriksa header apakah ada
Abderrazak BOUADMA
sumber