IE8 varsayılan olarak intranet web sitelerini uyumluluk moduna zorlar. Meta üstbilgiyi IE8 olarak değiştirmeyi denedim, ancak meta üstbilgiyi kabul etmiyor ve sadece tarayıcı ayarını kullanıyor. Bunu nasıl devre dışı bırakacağını bilen var mı?
IE8 varsayılan olarak intranet web sitelerini uyumluluk moduna zorlar. Meta üstbilgiyi IE8 olarak değiştirmeyi denedim, ancak meta üstbilgiyi kabul etmiyor ve sadece tarayıcı ayarını kullanıyor. Bunu nasıl devre dışı bırakacağını bilen var mı?
Yanıtlar:
İntranetteki uyumluluk modunu geçersiz kılmak mümkündür.
IIS için web.config dosyasına aşağıdaki kodu eklemeniz yeterlidir. IE9 ile benim için çalıştı.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Apache için eşdeğer:
Header set X-UA-Compatible: IE=Edge
Ve nginx için:
add_header "X-UA-Compatible" "IE=Edge";
Ve express.js için:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen doğru ama AMA biraz daha karmaşık ...
Paul Irish'ın harika kazan plakasını kullanıyorsanız, aşağıdaki gibi bir şeye sahip olacaksınız: -
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Bu beklendiği gibi ÇALIŞMAZ ve IE'de Intranette uyumluluk moduna zorlar"İntranet sitelerini uyumluluk görünümünde görüntüle" seçeneğini işaretlediyseniz ortamında . İntranet uyumluluk modunu önlemek için koşullu IE yorumlarını kaldırmanız gerekir.
Yani aşağıdaki kod çalışacaktır:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Temel olarak, koşullu IE yorumlarını deyimden önce tetiklerseniz , IE9'u varsayılan ayarlarla çalıştırıyorsanız <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
, bir Intranet ortamında uyumluluk moduna zorlanırsınız .
GÜNCELLEME - EK BİLGİ: Ancak, HTML5 kaynatmanın çalışmasını sağlayacak bir hile olduğunu unutmayın:
DOCTYPE'dan önce boş ve koşullu bir yorum ekleyin . Ayrıca, bunu yaptığınızda , yönerge etrafına koşullu yorumlar da ekleyerek X-UA-Compatible
HTML5 sayfasını da geçerli hale getirebileceğinizi unutmayın. Örneğin:
<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Bu cevabın ilk bölümünden esinlenen bir blog yazısı daha fazla ayrıntıya sahiptir. Ve bu arada: As o blog yazısında belirtilen, bir de bir ile DOCTYPE önce şartlı yorumunu yerini alabilir yarı koşullu yorumun hiçbir koşul : <!--[]-->
. Böylece, şöyle:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Ancak, ikinci varyantın ( <--[]--><!DOCTYPE html>
), örneğin başka bir soruya verilen bu cevapla açıklandığı gibi , X-UA-Compatioble
(IE7 ve IE6 için) desteği olmayan eski IE sürümleri için tarayıcıyı içine getirdiği iyi bilme sorununu aktive edeceğini unutmayın . Alay modu.
"Araçlar" menüsünü aşağı çekip "Uyumluluk Görünümü Ayarları" nı seçerseniz En alttaki iletişim kutusunda "İntranet sitelerini uyumluluk modunda görüntüle" ayarı bulunur. Sorunu çözmesi gereken bu seçeneğin işaretini kaldırırsanız IE, DOCTYPE tabanlı modu kullanır.
Bu sorunun cevaplarında belli bir karışıklık var.
Üst yanıt şu anda http başlığında bir bayrak ayarlayan sunucu tarafı bir çözümdür ve bazı yorumlar meta etiketi kullanan bir çözümün işe yaramadığını gösterir.
Bu blog girişinin uyumluluk meta bilgilerinin nasıl kullanılacağına dair güzel bir genel bakış sağladığını ve tecrübelerimin açıklandığı gibi çalıştığını düşünüyorum: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- ua-uyumlu-to-create-dayanıklı-kurumsal web applications.aspx
Ana nokta:
Önemli bir nokta (ve sanırım bu noktadan çok karışıklık geliyor) IE iki mod "sınıfı" olmasıdır:
Belge modu oluşturma motorunu belirler (web sayfası nasıl oluşturulur).
Tarayıcı Modu, IE'de hangi Kullanıcı-Aracısı (UA) dizesinin sunuculara göndereceğini, IE'de hangi Belge Modu varsayılanı olduğunu ve IE'nin Koşullu Yorumları nasıl değerlendireceğini belirler.
Belge modu ve tarayıcı modu hakkında daha fazla bilgi bu makalede bulunabilir: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- site developers.aspx? yönlendirilen = true
Deneyimlerime göre, uyumluluk meta verileri yalnızca belge modunu etkileyecektir . Yani tarayıcı algılamaya güveniyorsanız, bu size yardımcı olmaz. Ancak özellik algılama kullanıyorsanız, bu yolun yolu olmalıdır.
Bu yüzden bu sözdizimini kullanarak meta etiketi (html sayfasında) kullanmanızı tavsiye ederim:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Uyarı: test ettiğiniz tarayıcı modlarının bir listesini verin.
Blog yayını ayrıca EmulateIEX kullanımına karşı önerilerde bulunur. İşte bir teklif:
Olduğu söyleniyor, garip bulduğum bir şey bir uygulama EmulateIE7 veya EmulateIE8 istediğinde. Bu öykünme modlarının kendileri kararlardır. Yani, ne istediğiniz konusunda spesifik olmak yerine, iki şeyden birini istersiniz ve daha sonra bu iki şeyden hangisini bir DOCTYPE kodunun başka bir yerine bakarak belirlersiniz (ve sonra DOCTYPE'ın size standartlar verip vermeyeceğini anlamaya çalışırsınız. veya içeriğine bağlı olarak tuhaflıklar - bazen kafa karıştırıcı başka bir görev). Bunu yapmak yerine, kendisinin bir soru olduğu bir yanıt vermek yerine, doğrudan ne istediğinizi belirtmek daha anlamlı olur. IE7 standartlarını istiyorsanız, IE = EmulateIE7 yerine IE = 7 kullanın. (Bunun bir DOCTYPE kullanmamanız gerektiği anlamına gelmediğini unutmayın - yapmalısınız.)
Bu meta etiketi deneyin:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
"Intranet sitelerini uyumluluk görünümünde görüntüle" işaretli olsa bile IE8'i IE8 Standart Modu olarak görüntülenmeye zorlamalıdır [intranet veya tüm web siteleri için], IE 8.0.6'da kendimi denedim
Sistem yöneticimiz, kuruluşumuz için global olarak kutunun işaretini kaldırarak bu sorunu çözdü. Kullanıcıların oturumu kapatmasına bile gerek yoktu.
İşaretli İntranet Uyumluluk Görünümü'nü geçersiz kılmak için çalışan bir yanıt buldum. Sayfanızın OnInit etkinliğine bu satırı eklemeniz yeterlidir (meta veya web.config customHeader gerekmez):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Başlığa aşağıdakileri koymayı deneyin:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Paul Irish'ın HTML5 Boilerplate izniyle (ancak XHTML Transitional'da da çalışır).
Meta etiketi yalnızca ilk meta etiket olarak değil, yalnızca ÇOK İLK ETİKET olarak da ilk bölümünde İLK ETİKET olarak belirterek uyumluluk modunu geçersiz kılabildim .
@ Stefan.s'e mükemmel cevabını verdiğin için teşekkürler. Ben okumadan önce vardı:
BU ÇALIŞMIYOR
<head>
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >
bağlantı etiketini yoldan çekti ve işe yaradı
BU İŞLER :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Dolayısıyla, uyumluluk kullanmak üzere ayarlanan bir IE8 istemcisi sayfayı IE8 Standart modu olarak işler - content = 'IE = 9', IE9'a kadar ve IE9 dahil olmak üzere kullanılabilir en yüksek standardı kullanmak anlamına gelir.
Bu tam olarak bir çözüm değil, ama en iyisi olduğunu düşünüyorum. İntranet sitelerimizde insanlara yalnızca Firefox tarafından erişilebileceğini söylüyoruz, buradaki IE kullanıcılarına nazikçe bakmıyoruz. Sunucu veya istemci tarafındaki kullanıcı aracısını kontrol edin ve IE'den erişimini engelleyin. Ve ben bir .NET programcısıyım.
Bu sorunla mücadele ettim ve benzersiz bir çözüm ve içgörü sağlamaya yardımcı olmak istedim.
Bazı AJAX tabanlı çerçeveler, başında javascripts ve stil sayfalarını enjekte eder <head>
ve bunu yapmak iyi kurulmuş meta etiket çözümünün düzgün çalışmasını engelliyor gibi görünmektedir. Bu durumda, Andras Csehi'nin cevabı gibi HTTP yanıt başlığına doğrudan enjekte etmenin sorunu çözeceğini buldum.
Ancak Java Servlet kullananlarımız için bunu çözmenin iyi bir yolu bir ServletFilter kullanmaktır.
public class EmulateFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
HttpServletResponse response = ((HttpServletResponse)arg1);
response.addHeader("X-UA-Compatible", "IE=8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
Bu sorunu Spring-Apache-tomcat ortamında RequestInterceptor yöntemine tek bir satır ekleyerek çözebiliriz -
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {
// Some logic
// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8");
return true;
}
Referans kaynağı - Filtre oluşturma ve yanıt başlığını değiştirme Bu sorunu bir RequestInterceptor (Yay) aracılığıyla nasıl çözebileceğimizi kapsar.
Web sitenizin IE 8 standart modunu zorlamasını istiyorsanız, bu meta etiketi geçerli bir DOCTYPE ile birlikte kullanın:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Düz "IE8" yerine "EmulateIE8" değerini not alın.
IE geliştiricilerine göre, bu "IE8 Standartları modunda Standartlar DOCTYPE'lerini görüntüle; Quirks modunda Quirks DOCTYPE'leri görüntüle. İstemci makinelerde uyumluluk görünümünü geçersiz kılmak ve Standartları IE8 Standartlarına zorlamak için bu etiketi kullanın."
Bu IE blog yayını hakkında daha fazla bilgi: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Bu soru, intranetteki "Internet Explorer 8" tarayıcı modunun bir kopyasıdır .
Buradaki yanıtlar, uyumluluk görünümünü (sunucu tarafında) devre dışı bırakmanın mümkün olmadığını gösteriyor - https://stackoverflow.com/a/4130343/24267 . Kesinlikle böyle görünüyor, çünkü denediğim önerilerin hiçbiri işe yaramadı. IE8'de ne tür bir X-UA-Uyumlu başlık gönderirseniz gönderin "Tarayıcı Modu" Internet Explorer 8 Uyumluluk görünümüne ayarlanır.
Tarayıcı IE8 kullanarak render neden IE7 ve uyumluluk modu için bazı özel işlem yapmak zorunda kaldı ama IE7 olduğunu rapor, benim kod kırdı. Kodumu bu şekilde sabitledim (bu korkunç bir kesmek olduğunu biliyorum ve ben tarayıcı sürümleri değil özellikler için test olmalı):
isIE8 = navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 8; if (! isIE8 && navigator.appVersion.indexOf ("MSIE")! = -1 && parseFloat (navigator.appVersion.split ("MSIE") [1]) == 7 && navigator.appVersion.indexOf ("Trident") ! = -1) { // Yalancı, bu IE8 uyumluluk modunda. isIE8 = doğru; }
Bunu sayfalarınızın kafa etiketine ekleyin (istediğiniz IE sürümünü hedefleyin):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Not bu tarayıcının uyumluluk modu diyor gerçeğini değiştirmez ETMEYECEKTIR (tarayıcı modu olarak adlandırılır), ancak sayfa olacak IE8 Standartlar modunda işlemek. Eğer STILL nasıl istediğinizi oluşturmuyorsa, bunun nedeni büyük olasılıkla IE sürümünü kontrol eden javascriptiniz olması. Aşağıdaki blog yayınına bakınMeta X-UA-Uyumlu etiketini ayarlasanız bile, kullanıcı aracısı dizesi yine de MSIE 7.0 diyeceği için hangi özelliği kullanmanız gerektiğini belirlemek .
Benim durumumda, düzeltme için IE7 Uyumluluk modu için bir kontrol eklemek zorunda kaldım. Basit bir javascript kodu kullanarak yaptım:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Bunu tüm kullanıcılar için GPO aracılığıyla devre dışı bırakmak isteyen bunu okuyan herkes için, bu ayar:
Bilgisayar Yapılandırması / Yönetim Şablonları / Windows Bileşenleri / Internet Explorer / Uyumluluk Görünümü / Yerel İntranet için Internet Explorer Standartlar Modunu Açma
web.config düzenlemesi benim için düzeltmesine rağmen.
.Htaccess içindeki başlıkları değiştirme
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Bu sorunun çözümünü burada buldum : https://github.com/h5bp/html5-boilerplate/issues/378
Stefan S'nin belge modu ve tarayıcı modu hakkındaki yorumu sorunum için çok uygun.
Sayfada X-UA-Content meta verileri var, ancak tarayıcı sürümünü istemci tarafında test ediyordum navigator.appVersion
. Bu test meta verileri yansıtmaz çünkü tarayıcı moduna belge moduna değil.
Benim için cevap şöyle bir document.documentMode
şeyi test etmekti :
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Şimdi, meta X-UA-Content etiketim tarayıcı testime yansıyor.
Neden tarayıcıyı test etmek gibi kaşlarını çatmış bir şey yapıyorum? Hız. Tablesorter gibi benim jQuery eklentileri çeşitli IE6 / 7 üzerinde çok yavaş ve onları kapatmak istiyorum. Tarayıcı özelliklerini test etmenin, bunu aksi takdirde çözmeme yardımcı olabileceğinden emin değilim.