Mematikan mode kompatibilitas IE menggunakan tag

375

Saya melakukan pekerjaan untuk klien yang memaksakan mode kompatibilitas di semua situs intranet. Saya bertanya-tanya apakah ada tag yang bisa saya masukkan ke HTML saya yang memaksa mode kompatibilitas mati.

Al Katawazi
sumber
Saya pikir jawaban yang Anda cari ada di sini: stackoverflow.com/questions/1014666/…
Gabriel
45
Sebenarnya saya sedang mencari yang sebaliknya, yang menetapkan standar mereka ke mode kompatibilitas, itu hanya gila.
Al Katawazi
12
Javascript buruk pada aplikasi lawas yang mogok pada apa pun selain IE7, itulah yang menetapkan standar mereka untuk kompatibilitas. Suatu hari, kita akan menggantinya ...
pete the pagan-gerbil
1
@ petethepagan-gerbil apakah Anda sempat menggantinya? : P
icedwater
1
@icedwater Saya meninggalkan perusahaan lebih dari 6 tahun yang lalu :) Kami melakukan perbaikan kecil untuk menghapus masalah setiap kali kami memiliki perubahan di bidang yang sama, tetapi utang teknologi tidak pernah diprioritaskan di sana. Tidak tahu apakah pada akhirnya bisa diperbaiki.
pete the pagan-gerbil

Jawaban:

535

Ada mode "tepi" .

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

Dari halaman MSDN tertaut:

Mode Edge memberitahu Windows Internet Explorer untuk menampilkan konten dalam mode tertinggi yang tersedia, yang sebenarnya mematahkan paradigma "mengunci". Dengan Internet Explorer 8, ini setara dengan mode IE8. Jika rilis (Explorer) Internet Explorer di masa depan mendukung mode kompatibilitas yang lebih tinggi, halaman yang diatur ke mode Edge akan muncul dalam mode tertinggi yang didukung oleh versi itu; Namun, halaman yang sama akan tetap muncul dalam mode IE8 bila dilihat dengan Internet Explorer 8.

Namun, mode "edge" tidak dianjurkan dalam penggunaan produksi:

Disarankan bahwa pengembang Web membatasi penggunaan mode Edge untuk menguji halaman dan penggunaan non-produksi lainnya karena kemungkinan hasil rendering konten halaman yang tidak diharapkan dalam versi Windows Internet Explorer yang akan datang.

Sejujurnya saya tidak sepenuhnya mengerti mengapa. Tetapi menurut ini, cara terbaik untuk pergi saat ini adalah menggunakanIE=8 .

Pekka
sumber
7
Pada 8/6/2012 Microsoft tampaknya menggunakan IE=10di situs mereka sendiri. Jika Anda telah menguji situs Anda di IE10 (versi pratinjau), aman untuk menggunakannya; jika tidak, Anda mungkin ingin tetap berpegang pada IE=9saat ini.
calvinf
75
Saya telah menemukan bahwa ini TIDAK berfungsi jika pengguna (atau sysadmin) telah mengaktifkan mode kompatibilitas sebagai default dengan pergi ke Tools->Compatibility View Settings, dan memeriksa Tampilkan semua situs web di Tampilan Kompatibilitas. Untuk memperbaiki masalah, saya harus mengembalikan header dalam respons HTTP:X-UA-Compatible: IE=edge
speedplane
10
+1 ke speedplane - Mode kompatibilitas IE10 AKTIF secara default untuk situs intranet - UGH ... terima kasih telah menemukan!
viperguynaz
132
Nasihat nasihat untuk mereka yang menemukan jawaban ini, tetapi tidak dapat membuatnya bekerja untuk mereka. Tag meta kompatibilitas harus menjadi tag meta pertama, dan tidak ada pernyataan bersyarat IE sebelum tag. Lebih lanjut: tesmond.blogspot.com/2011/10/...
Chris Sobolewski
2
Chris terima kasih! Saya berjuang dengan ini selama 30 menit ketika saya akhirnya membaca komentar Anda. Saya tidak memilikinya terlebih dahulu.
Hawkee
91

Setelah berjam-jam memecahkan masalah ini ... Berikut adalah beberapa sorotan cepat yang membantu kami dari X-UA-Compatibledokumen: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

Menggunakan <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • The Standard User Agent mode (yang non-meniru) mengabaikan <!DOCTYPE>arahan di halaman Anda dan render berdasarkan standar yang didukung oleh versi IE (misalnya, IE=8akan lebih baik patuh jarak perbatasan meja dan beberapa selektor semu dari IE=7).

  • Sedangkan, mode Emulasi memberi tahu IE untuk mengikuti <!DOCTYPE>arahan apa pun di halaman Anda, merender mode standar berdasarkan versi yang Anda pilih dan mode quirks berdasarkanIE=5

  • Nilai yang mungkin untuk contentatribut adalah:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"

brandonjp
sumber
67

Jika Anda bekerja dengan halaman di Zona Intranet, Anda mungkin menemukan bahwa IE9 apa pun yang Anda lakukan, masuk ke mode Compat IE7.

Ini karena pengaturan dalam pengaturan Kompatibilitas IE yang mengatakan bahwa semua situs Intranet harus berjalan dalam mode kompatibilitas. Anda dapat menghapus ini melalui kebijakan grup (atau sekadar menghapusnya di IE), atau Anda dapat mengatur yang berikut:

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

Ini berfungsi (seperti yang dijabarkan dalam jawaban lain), tetapi mungkin awalnya tidak muncul begitu: itu perlu dilakukan sebelum lembar style dinyatakan . Jika tidak, itu diabaikan.

Amadiere
sumber
3
terima kasih atas peringatan tentang stylesheet, ini menyebabkan masalah dan saya tahu alasannya sekarang!
eMRe
Yap, awalnya dirampok dengan penempatan. Terima kasih telah menambahkan ini.
John Moylan
Terima kasih itu sangat membantu. Mereka memiliki GPO yang menetapkan level IE efektif pada 7 meskipun IE 11 diinstal. Ini menyelamatkan saya dari keharusan menaruh beberapa shims di situs untuk mendapatkan js bekerja.
Charles Owen
28

Saya yakin ini akan membantu:

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Peter Ruderman
sumber
28

Seperti yang disarankan dalam jawaban ini untuk pertanyaan terkait, mode "edge" dapat diatur dalam file Web.Config. Ini akan membuatnya berlaku untuk semua HTML yang dikembalikan dari aplikasi tanpa perlu memasukkannya ke halaman individual:

<configuration>
    <system.webServer>
        <httpProtocol>
            <customHeaders>
                <add name="X-UA-Compatible" value="IE=edge" />
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

Langkah yang sama ini juga dapat dilakukan dengan memodifikasi "HTTP Response Headers" menggunakan IIS Manager untuk server IIS, seluruh situs web, atau aplikasi tertentu.

Erik Anderson
sumber
19

Solusi tag meta tidak berfungsi untuk kami, tetapi pengaturan di tajuk respons berhasil:

header('X-UA-Compatible: IE=edge,chrome=1');
Lance Anderson
sumber
3
+1 untuk 'chrome = 1'; Saya tidak pernah tahu tentang itu. Untuk apa nilainya, mengubahnya ke IE = 10 membersihkan sejumlah masalah rendering di situs saya bahwa IE = edge tidak berpengaruh.
Penjelasan chrome=1properti, stackoverflow.com/a/22059516/368691 . Perhatikan bahwa Chrome Frame telah dihentikan. blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus
1
lihat komentar pada jawaban lain ... Saya telah menemukan bahwa ini TIDAK berfungsi jika pengguna (atau sysadmin) telah mengaktifkan mode kompatibilitas sebagai default dengan pergi ke Tools-> Pengaturan Tampilan Kompatibilitas, dan memeriksa Tampilkan semua situs web di Tampilan Kompatibilitas . speedplane 19 Apr 13 di 11:29 7 Tag meta kompatibilitas harus menjadi tag meta pertama, dan TIDAK boleh ada pernyataan bersyarat IE sebelum tag. Lebih lanjut: tesmond.blogspot.com/2011/10/... - Chris Sobolewski 19 Agustus '13 pukul 20:23
felickz
Saya mencoba meletakkannya di baris pertama di halaman tata letak. Tidak berfungsi, Stu menyebutkan mengubah IIS HTTP Response Headers. Saya mencoba. Saya memulai kembali kumpulan aplikasi. Saya lebih banyak memeriksa. Halaman ini bersarang di bawah halaman lain. Halaman lain memang memiliki meta lain. Ini adalah situs web produksi. Begitu banyak orang mengakses halaman ini. menempatkan tag ini di atas adalah misi yang mustahil. Solusi lain atau saya sekrup
user12345
10

Hanya beberapa catatan lagi tentang topik ini berdasarkan pengalaman saya baru-baru ini. Universitas tempat saya bekerja untuk masalah laptop dengan IE 8 diatur ke mode kompatibilitas untuk semua Situs Intranet. Saya mencoba menambahkan tag meta untuk menonaktifkan mode ini untuk halaman yang dilayani oleh situs saya tetapi IE secara konsisten mengabaikan tag ini. Seperti yang disebutkan Lance dalam postingannya, menambahkan header respons telah memperbaiki masalah ini. Ini adalah bagaimana saya mengatur header berdasarkan metode boilerplate HTML5:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

Agar header ini benar-benar dikirim, Anda harus memastikan mod_headers Anda dihidupkan di Apache. Jika Anda ingin memastikan mod ini diaktifkan, letakkan ini di halaman yang dapat menjalankan php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>
Cloudkiller
sumber
Metode .htaccess bekerja untuk saya, di IE8 + Ini menghapus tombol kompatibilitas (alias Musuh No. 1) dan memaksa IE8 untuk menghindari menggunakan mode kompatibilitas. Terkait: Alternatif tag meta tampaknya hanya berfungsi di bawah kondisi tertentu (IE Voodoo) di berbagai komputer.
William Isted
10

IE8 default ke mode standar untuk mode intERnet dan kebiasaan untuk intRAnet. Tag meta HTML diabaikan jika Anda memiliki doctype yang disetel ke xhtml transisi. Solusinya adalah menambahkan header HTTP dalam kode. Ini berhasil untuk kita. Sekarang situs intranet kami memaksa IE8 untuk membuat aplikasi dalam mode standar.

Ditambahkan ke PageInit dari kelas halaman dasar (ASP.net C #):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

referensi: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html

rankank
sumber
3

Ini karena pengaturan dalam pengaturan Kompatibilitas IE yang mengatakan bahwa semua situs Intranet harus berjalan dalam mode kompatibilitas. Anda dapat menghapus ini melalui kebijakan grup (atau sekadar menghapusnya di IE), atau Anda dapat mengatur yang berikut:

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

Tampaknya tidak mungkin untuk mengubah pengaturan tampilan kompatibilitas sebagai kebijakan grup tetapi itu adalah sesuatu yang mungkin dapat diubah dalam registri, tag meta ini berfungsi dengan baik untuk saya, saya harus membuat atribut yang diperlukan berfungsi sebagai bagian dari bentuk html , itu bekerja di chrome dan firefox tetapi tidak pada IE.

Berikut ini adalah visual yang bagus dari browser apa yang mendukung setiap elemen html 5 individu.

http://html5readiness.com/

Perhatikan satu penyebut umum Google Chrome, ia mendukung semuanya. beharap ini membantu

Mendekam
sumber
Sepertinya Firefox dan IE 10 sekarang mendukung semuanya juga. Bagan tidak membuat sejelas itu untuk Chrome.
Tony L.
0

Sisipkan sebagai item pertama di bawah tag.

Ini memaksa IE untuk merender halaman dalam versi fisik IE, dan mengabaikan "pengaturan Mode" Browser. Ini dapat diatur dalam alat pengembang, cobalah mengubahnya ke versi IE yang lebih lama untuk diuji, ini harus diabaikan dan halaman akan terlihat persis sama.

technocrusaders.com
sumber
0

Jika Anda memiliki akses ke server, cara yang paling dapat diandalkan untuk melakukan ini adalah melakukannya di server itu sendiri, di IIS. Masuk ke IIS HTTP Response Headers. Tambahkan Nama:
Nilai Kompatibel-X-UA : IE = edge Ini akan mengesampingkan browser Anda dan kode Anda.

stu
sumber
Ini mengatur ulang pada penyebaran baru ke IIS jika diatur di tingkat situs web
Eman Pitts
0

Jika Anda ingin setiap halaman web memuat konten yang dipilih dan menggunakan asp.net. Cukup terapkan sebagai tag pertama di bawah tag heading di Views> shared> Layout.cshtml

hanya sebuah tip

rubypeach888
sumber