X-UA-Compatible IE = edge olarak ayarlanmış, ancak yine de Uyumluluk Modu'nu durdurmuyor


248

Çok kafam karıştı. Ayarlayabilmeliyim

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

IE8 ve IE9, en son oluşturma motorunu kullanarak sayfayı oluşturmalıdır. Ancak, sadece test ettim ve Uyumluluk Modu sitemizin başka bir yerinde açıksa, zorlamamıza rağmen sayfamız için açık kalacaktır .

Nasıl IE bulunmadığından emin olmak gerekiyor değil (hatta bir intranet) Uyumluluk Modu?

FWIW, HTML5 DocType bildirimini ( <!doctype html>) kullanıyorum.

Sayfanın ilk birkaç satırı:

<!doctype html> 
<!--[if lt IE 7 ]> <html lang="en" class="innerpage no-js ie6"> <![endif]--> 
<!--[if IE 7 ]>    <html lang="en" class="innerpage no-js ie7"> <![endif]--> 
<!--[if IE 8 ]>    <html lang="en" class="innerpage no-js ie8"> <![endif]--> 
<!--[if (gte IE 9)|!(IE)]><!--> 
<html lang="en" class="innerpage no-js"> 
<!--<![endif]--> 
    <head> 
        <meta charset="ISO-8859-1" /> 
        <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

EDIT: Ben sadece IE8 varsayılan ayar intranet siteleri için IE7 uyumluluk modunu kullanmak olduğunu öğrendim . Bu, X-UA-Uyumlu meta etiketi geçersiz kılar mı?


Bazı kullanıcılarımda da bu sorunu yaşıyorum, bunu hiç anladınız mı? Uygulamam intranet değil. Ve sadece kullanıcıların% 20'si garip bir şekilde anlıyor.
Kevin

2
Bu, komik <html> etiket işaretlemenizin (<! - [eğer IE 7] ise) bir sonucu olabilir. Çıkarmayı deneyin ve çalışıp çalışmadığını görün. Bu SO sorusuna bakın stackoverflow.com/questions/10682827/…
Pazar Ironfoot

13
@SundayIronfoot FYI, bahsettiğiniz komik <html> etiket işaretlemesi, uygun IE sürümü (varsa) için <html> öğesine bir CSS sınıfı eklemek için kullanılan koşullu IE yorumlarıdır (varsa), gerektiğinde işleri farklı şekillerde biçimlendirebilirsiniz IE sürümleri için stil bildiriminize ".ie7" ön ekini ekleyerek, örneğin: .ie7 p {width: 200px; } ... eski IE sürümlerindeki sorunları oluşturmak için * width veya _width gibi bazı CSS saldırılarını kullanmaktan daha temiz bir çözümdür. IE dışındaki tarayıcılar bunu görmezden gelir ve sadece temel olanı kullanır.
Tim Franklin

Yanıtlar:


262

İntranet siteleri için IE'nin Uyumluluk Görünümü Ayarlarını geçersiz kılmanız gerekirse, bunu web.config (IIS7) veya özel HTTP üstbilgileri aracılığıyla yapabilirsiniz. web sitesinin özelliklerindeki (HTTP6) ve X-UA-Uyumlu olarak ayarlayabilirsiniz. Meta etiket, Uyumluluk Görünümü Ayarları'ndaki IE'nin intranet ayarını geçersiz kılmaz, ancak barındırma sunucusuna ayarlarsanız uyumluluğu geçersiz kılar.

IIS7'deki web.config örneği:

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

Düzenleme : Ben clearhemen önce kod kaldırıldı add; kopyalama ve yapıştırmadan kaynaklanan gereksiz bir denetimdi. İyi avlar, yorumcular!


5
Yine de bir not ... Yerleşik Visual Studio geliştirme web sunucusunu (aka Cassini olarak) geliştiriyorsanız, Cassini web'in <system.webServer> bölümünü onurlandırmadığı için bu işe yaramaz. yapılandırma. Bu nedenle geliştirme için IIS Express kullanın.
James Messinger

1
Nedeni nedir <clear />? Hangi özel başlıklar bununla temizlenir?
M4N

Açık olan <urlCompression...>en azından benim için kuralı kaldırmış gibi görünüyor . Bu kural gzipping yapıyor, ki ben bunu açıkladım. Daha fazla bilgi güzel olurdu.
Nenotlep

'Net' yakalamayı kaldırdım - iyi yakalama, bu benim kopyalama ve yapıştırma benim için gereksiz bir satır oldu.
Tim Franklin

14
PHP:<?php header('X-UA-Compatible: IE=edge'); ?>
Nux

183

Yanıtında @TimmyFranks'ın önerdiği gibi Sunucu Tarafı çözümü önerilir, ancak X-UA-Compatiblekuralın sayfa düzeyinde uygulanması gerekiyorsa, daha önce yanmış olan kişinin deneyiminden yararlanmak için lütfen aşağıdaki ipuçlarını okuyun.


X-UA-CompatibleMeta etiketi gerekir başlığı takiben düz görünür <head>elemanı. Başka hiçbir meta etiket, css bağlantısı ve js komut dosyası çağrısı önüne konamaz.

<head>
    <title>Site Title</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <script type="text/javascript" src="/jsFile.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="apple-touch-icon" href="https://stackoverflow.com/apple-touch-icon.png" />
    <link rel="shortcut icon" href="https://stackoverflow.com/apple-touch-icon.png" />
</head>

Sayfada herhangi bir koşullu yorum varsa (diyelim ki içinde bulunur <html>), sonra, altına yerleştirilmelidir <head>.

// DON'T: place class inside the HTML tag 
<!--[if gt IE 8]><!--> 
    <html class="aboveIe8"> 
<!--<![endif]-->

// DO: place the class inside the BODY tag
<!--[if gt IE 8]><!--> 
    <body class="aboveIe8"> 
<!--<![endif]-->

Html5BoilerPlate'in ekibi bu hata hakkında yazdı - http://h5bp.com/i/378 Birkaç çözümü var.

İntranet ve Uyumluluk görünümü ile ilgili olarak, araçlar> Uyumluluk görünümü ayarları'na gittiğinizde ayarlar vardır.

Uyumluluk görünümü ayarları


1
Stack Overflow üzerinde 4 veya 5 başka cevap denedim ve sadece bu özel kombinasyon benim için çalıştı. WordPress ve bir SEO eklentisi kullanan herkes için, eklentinin başka bir konumda <title> 'i yeniden yazmasına dikkat edin. Düzenleme: WordPress yorumu eklendi
Mike Ebert

6
X-UA-CompatibleMuhtemelen sonracharset mümkün olduğunca erken görünmelidir . Ben "başlıktan hemen sonra görünmesi" doğru olduğunu sanmıyorum.
sam

Bu öneri IE altında acı çekmenin bir sonucudur. Kan yoluyla kazanıldı. IE kurallara uyarak kim diyor?
neoswf

4
Vay canına, bu benim için çalıştı ve meta etiketimi başlık etiketinden hemen sonra hile yaptı. Bu işi yapmak çok eski
olmasaydı

X-UA-CompatibleMeta etiketi sonra ortaya çıkabilir title, baseve etkisini kaybetmeden diğer herhangi bir meta etiketleri. IE8'de test ettiğim şey bu. Yine de, şartlı yorum yapılamaz.
Rockallite

37

PHP'den sunuyorsanız, düzeltmek için aşağıdaki kodu da kullanabileceğinizi unutmayın.

header("X-UA-Compatible: IE=Edge");

4
Bu, meta etiketi eklemekten daha iyi çalışır, çünkü bu yöntemi kullanarak W3C doğrulamasını geçer ve bir .htaccess saldırısından çok daha kolaydır.
Talvi Watia

2
Diğer her şeyi denedim ve nihayet işe yaradı. Teşekkür ederim.
Jason

2
WordPress'te olanlar için bu yardımcı olabilir: codex.wordpress.org/Plugin_API/Action_Reference/send_headers
ambiguousmouse

Bu büyük bir site bağlı olarak da çok daha iyi çalışır <!--[if lt IE 7 ]> <html>...! TEŞEKKÜR EDERİM! Tanrı gönderildi!
OZZIE

2
@sunskin - PHP tarafından gönderilen herhangi bir başlık , sayfaya herhangi bir çıktı göndermeden önce, yani herhangi bir HTML veya veri PHP tarafından çıkarılmadan önce OLMALIDIR .
TJ L

25

Anlaşıldığı üzere, bu, tüm intranet sitelerinin ayarlanmış olsa bile uyumluluk moduna zorlaması için Microsoft'un "akıllı" seçimiyle ilgilidir .X-UA-CompatibleIE=edge


32
Bu doğru değil. X-UA-Uyumlu, uyumluluk modu ayarını geçersiz kılar. Bununla birlikte, bazen meta etiketin kullanılması çalışmaz, çünkü mod karşılaştığı zamana göre ayarlanmıştır. Bu yüzden HTML üstbilgi sürümünü kullanıyorum, böylece tarayıcı sürecin başlarında standartlar modunu etkinleştirebilir.
Erik Funkenbusch

3
Mystere Man'ın yorumuna ek olarak, web.config dosyasını veya IIS'deki özel http başlıklarını kullanarak barındırma sunucusundan geçersiz kılabilirsiniz. Ayrıntılar için yukarıdaki yazıma bakın.
Tim Franklin

7
Bu birden çok kez denedim ve karşılaştırılabilirlik moduna zorlanan tüm intranet sitelerini geçersiz kılmaz.
Efendim

@Mystere Man: Bazen, üst belgenin XUA-COMPAT'ı tanımlamadığı ve belge modunun üst sayfadan (başka bir çok akıllı MS seçeneği) devralındığı bir iframe'de olduğu zaman tanımlayın.
Stefan Steiger

1
@ Kerrick: Bu doğru cevap değil. Doğru cevap için aşağıdaki tj111 tarafından cevaplanana bakınız.
dejenere

9

Ayrıca yerel ana bilgisayar için IE7 Belge standartlarında IE9 işleme aynı sorunu var. Birçok koşullu yorum etiketi denedim ama başarısız oldu. Sonunda tüm koşullu etiketleri kaldırdım ve hemen aşağıdaki gibi hemen sonra meta etiketi ekledim ve çekicilik gibi çalıştı.

<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

Umarım yardımcı olur


8

"İntranet sitelerini Uyumluluk Görünümünde görüntüle" seçeneğinin işaretini kaldırmış ve yanıt başlıklarınızda X-UA-Uyumlu olsa bile, tarayıcınızın varsayılan olarak "Uyumluluk Görünümü" ne (Grup İlkesi) geçmesinin başka bir nedeni daha vardır. Aşağıdaki mesaj için konsolunuza bakın:

HTML1203: xxx.xxx, Grup İlkesi aracılığıyla Uyumluluk Görünümü'nde çalışacak şekilde yapılandırıldı.

Burada xxx.xxx, sitenizin alan adıdır (örn. Test.com). Bunu görürseniz, test.com ile biten herhangi bir sitenin dokümana, başlıklara vb. Bakılmaksızın otomatik olarak Uyumluluk modunda görüntülenmesi için alan adınız için grup politikası ayarlanır.

Daha fazla bilgi için lütfen aşağıdaki bağlantıya bakın (html kodlarını açıklar): http://msdn.microsoft.com/en-us/library/ie/hh180764(v=vs.85).aspx


5

NEOSWF'un yukarıda belirttiği gibi, Paul Irish koşullu yorumları meta etiketin herhangi bir etkisi olmasını durdurur.

Burada birkaç düzeltme var ( http://nicolasgallagher.com/better-conditional-classnames-for-hack-free-css/ )

Bunlar:

İki HTML sınıfı ekleme, sunucu başlıklarını kullanma ve dokümanın üstüne koşullu bir açıklama ekleme.

En son projemde Paul Irish'ın koşullu yorumlarını kaldırmaya karar verdim. Önce çok sayıda test yapmadan html'den önce bir şey ekleme fikrini beğenmedim ve sadece HTML'ye bakarak nelerin ayarlandığını görmek güzel.

Sonunda bedenden hemen sonra bir div kuşattım ve koşullu yorumlar kullandım.

  <!--[if IE 7]><div class="ie7"><!--<![endif]-->
  ... regular body stuff
  <!--[if IE 7]></div><!--<![endif]-->

Bunu vücudun her yerinde yapabilirdim ama Wordpress gibi CMS'lerle daha zor.

Açıkçası, işaretlemenin içindeki başka bir DIV, ancak sadece eski tarayıcılar için.

Bence proje bazında bir karar olabilir.

Ben de ilk 1024 bayt içinde gelmesi gereken charset meta etiketi hakkında bir şey okudum böylece bu sağlar.

Bazen en basit, okunması en kolay fikirler en iyisidir ve kesinlikle düşünmeye değer! Bunu işaret ettiği için yukarıdaki bağlantıdaki 6. yorum için teşekkürler.


5

X-UA-CompatibleTarayıcı Modunu değil, yalnızca Belge Modunu geçersiz kılar ve tüm intranet siteleri için çalışmaz; durum buysa, en iyi çözüm "İntranet sitelerini Uyumluluk Görünümü'nde görüntüle" seçeneğini devre dışı bırakmak ve hangi intranet sitelerinin uyumluluk moduna ihtiyacı olduğunu belirtmek için bir grup ilkesi ayarı yapmaktır.


5

Hile yaptığım htaccess dosyama aşağıdakileri ekledim:

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie

1
intranet uyumluluğa ayarlandığında çalışır. işe yarayacak bir şey bulmam uzun zaman aldı. özellikle arama yaptığınızda ve her şey iis ile ilgili olduğunda
shorif2000

Bu harika. .Htaccess ile başlık gönderebileceğinizi bilmiyordum
Alex W

3

Ayrıca, X-UA-Compatible, başlık bölümündeki ilk meta etiket olmalıdır

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
</head>

Bu arada, doğru sipariş veya ana kafa etiketleri:

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta charset="utf-8">
    <title>Site Title</title>
    <!-- other tags -->
</head>

Bu yoldan

  1. render motorunu IExplorer işlemeye başlamadan önce kullanılacak şekilde ayarladık
  2. ardından tüm tarayıcı için kodlamayı ayarladık
  3. daha önce tanımlanmış kodlamayla işlenecek başlığı yazdırırız.

2
Aslında CHARSET, X-UA-Uyumlu'dan önce gelmelidir. Bkz. Blogs.msdn.com/b/ieinternals/archive/2011/07/18/…
EricLaw

1
İlk olmak zorunda değil, ama zirveye yakın olması gerekiyor. Başlığı takip edebilir (ve Eric'in belirttiği gibi charset), ama hepsi bu.
Lance Leonard

nginx'teki durumumda, yalnızca X-UA-Uyumlu-etiketi kafa bölümünde ilk ise çalışır
Marco Roth

2

Timmy Franks benim için doğru olanı yaptı. Bugün müşterinin şirket genelinde IE8'e sahip olduğu sorunu yaşadık ve intranetleri için yazdığımız siteyi uyumluluk moduna zorluyordu. "IE-Edge" ayarı düzeltilmiş gibi görünüyordu.

<httpProtocol>
  <customHeaders>
    <clear />
    <add name="X-UA-Compatible" value="IE=Edge" />
  </customHeaders>
</httpProtocol>


1

IE 11, başlığı göndererek artık tarayıcı uyumluluğu görünümü ayarını geçersiz kılmanıza izin vermiyor ...

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

Tarayıcıyı uyumluluk görünümünü kullanmaya zorlamanın tek yolu, kullanıcının tarayıcısında devre dışı bırakmasını sağlamaktır. Bizimki bir Intranet sitesidir ve varsayılan IE seçeneği Intranet siteleri için uyumluluk görünümü kullanmaktır. Ne acı!

Kullanıcının IE 9 ve 10 kullanıcıları için tarayıcı ayarlarını değiştirme ihtiyacını önleyebildik, ancak artık IE 11'de çalışmıyor. IE kullanıcılarımız bunun bir sorun olmadığı ve hiçbir zaman sahip olmadığı Chrome'a ​​geçiyor olmuştur.


Buna izin vermez, IE11başka Uyumluluk Modlarını desteklemez edge. Resmi belgelere bağlantı . Bu, artık adres çubuğundaki CM düğmesini gizlemek için bu meta etiketi kullanmamız gerekmediği anlamına gelir.
Wallace Sidhrée

4
Doğru: IE11 hala tüm eski Uyumluluk Modlarını destekler.
EricLaw

@EricLaw, EricP'in cevabı doğru mu (IE11'in X-UA-Uyumlu HTTP üstbilgisinin davranışını değiştirdiğini)?
Matthew Flaschen

@EricP, HTTP üstbilgisini veya yalnızca <meta> etiket sürümünü denediniz mi?
Matthew Flaschen

2
@MatthewFlaschen: Hayır, EricP, Wallace Sidhree gibi yanlıştır (Wallace için adil olmakla birlikte, MSDN, "kullanımdan kaldırılmış" ile ne anlama geldiğini açıklamamaktadır). IE11'de değişen, görünür "Uyumluluk Görünümü" düğmesinin olmamasıdır ( technet.microsoft.com/en-us/library/dn321449.aspx ), ancak X-UA-Uyumlu bildirimlere hala saygı duyulmaktadır.
EricLaw

1

Ben php ile HTML önce bu yükleme başlıkları etrafında başardı ve çok iyi çalıştı.

<?php 
header( 'X-UA-Compatible: IE=edge,chrome=1' );
header( 'content: width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' );
include('ix.html');
?> 

ix.html, başlıkları gönderdikten sonra yüklemek istediğim içeriktir.


1

IE11'de de aynı sorunu yaşıyordum. Bu cevapların hiçbiri sorunumu çözmedi. Biraz kazdıktan sonra, tarayıcının Enterprise'da çalıştığını fark ettim modda . (F12 tuşuna basarak doğrulayın ve öykünme sekmesini tıklayın, tarayıcı profili açılır menüsünü arayın) Ayar kilitlendi, ayarı değiştirmeme izin vermiyor.

CurrentVersion'ı aşağıdaki kayıt defteri anahtarından sildikten sonra profili Masaüstüne değiştirebildim :

HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\EnterpriseMode

Modu Masaüstü olarak değiştirdikten sonra bu yayındaki cevaplar çalışacaktır.


1

Tarayıcınız Uyumluluk Modları ile açıldığında, web tarayıcınızdan ve Yerel Grup İlkesi Düzenleyicisi'nden tüm uyumluluk modu yapılandırmasını kaldırıp kapatsanız bile, kayıt anahtarından devre dışı bırakmayı deneyebilirsiniz.

Bu, sunucu tarafını bağlamak için etki alanı ve alt etki alanı kullanma konusunda da başıma geliyor. Makinenin tüm alt etki alanları için uyumluluk modunda açılması kısıtlanmıştır.

INTRANET İÇİN UYGUNLUK MODUNU DEVRE DIŞI BIRAK

HKEY_LOCAL_MACHINE - SOFTWARE - İlkeler - Microsoft - Internet Explorer - BrowserEmulation -> IntranetCompalityMode Değeri 0 (sıfır) olmalıdır . Ayrıca, mevcut etki alanı adını PolicyList'ten kaldırın.

Aksi takdirde, 0 (sıfır) değer verisi içeren yeni bir değer (DWORD) ekleyebilirsiniz .


0

Birçok kombinasyonu denedikten sonra aynı sorunu yaşadım Bu çalışma notu vardı İntranet için uyumluluk kontrol var

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<head runat="server">

0

LAMP yığını kullanıyorsanız, bunu web kök klasörünüzdeki .htaccess dosyanıza ekleyin. Her PHP dosyasına eklemenize gerek yok.

<IfModule mod_headers.c>
    Header add X-UA-Compatible "IE=Edge"
</IfModule>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.