Secara default IE8 memaksa situs web intranet ke mode kompatibilitas. Saya mencoba mengubah header meta ke IE8, tetapi tidak mengakui header meta dan hanya menggunakan pengaturan browser. Adakah yang tahu cara menonaktifkan ini?
Secara default IE8 memaksa situs web intranet ke mode kompatibilitas. Saya mencoba mengubah header meta ke IE8, tetapi tidak mengakui header meta dan hanya menggunakan pengaturan browser. Adakah yang tahu cara menonaktifkan ini?
Jawaban:
Dimungkinkan untuk mengganti mode kompatibilitas di intranet.
Untuk IIS, tambahkan saja kode di bawah ini ke web.config. Bekerja untuk saya dengan IE9.
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
Setara dengan Apache:
Header set X-UA-Compatible: IE=Edge
Dan untuk nginx:
add_header "X-UA-Compatible" "IE=Edge";
Dan untuk express.js:
res.set('X-UA-Compatible', 'IE=Edge')
Michael Irigoyen benar TETAPI itu sedikit lebih rumit ...
jika Anda menggunakan pelat yang indah oleh Paul Irish maka Anda akan memiliki sesuatu seperti berikut: -
<!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">
Ini TIDAK akan bekerja seperti yang diharapkan dan memaksakan IE ke mode kompatibilitas dalam Intranet lingkungan jika Anda memiliki "Tampilkan situs intranet dalam tampilan kompatibilitas" dicentang. Anda perlu menghapus komentar IE bersyarat untuk mencegah mode kompatibilitas Intranet.
Jadi kode berikut akan berfungsi:
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Pada dasarnya jika Anda memicu komentar bersyarat IE sebelum <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
pernyataan itu maka Anda akan dipaksa ke mode kompatibilitas di lingkungan Intranet jika Anda menjalankan IE9 dengan pengaturan default.
UPDATE - INFO TAMBAHAN: Tetapi perhatikan bahwa ada trik yang akan membuat HTML5 boilplate bekerja:
Tambahkan emtpy, komentar kondisional sebelum DOCTYPE. Dan catatan juga, bahwa ketika Anda melakukan itu , maka Anda dapat juga menambahkan komentar bersyarat sekitar X-UA-Compatible
direktif, membuat halaman HTML5-sah juga. Jadi misalnya:
<!--[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]-->
Sebuah posting blog yang terinspirasi oleh bagian pertama dari jawaban ini , memiliki lebih rinci. Dan omong-omong: Seperti disebutkan dalam posting blog, kita juga bisa mengganti komentar bersyarat sebelum DOCTYPE dengan bersyarat setengah komentar dengan ada kondisi : <!--[]-->
. Jadi, seperti ini:
<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->
Tetapi perhatikan bahwa varian terakhir ( <--[]--><!DOCTYPE html>
) akan, seperti yang dijelaskan misalnya dengan jawaban atas pertanyaan lain , mengaktifkan masalah yang sudah diketahui dengan baik - untuk versi lawas IE tanpa dukungan untuk X-UA-Compatioble
(baca: untuk IE7 dan IE6) - bawa browser ke mode quirks.
Jika Anda membuka menu "Alat" dan memilih "Pengaturan Tampilan Kompatibilitas" Pada dialog di bagian bawah adalah pengaturan "Tampilkan situs intranet dalam mode kompatibilitas". Jika Anda tidak mencentang ini yang seharusnya menyelesaikan masalah dan IE akan menggunakan mode berdasarkan DOCTYPE.
Ada sejumlah kebingungan dalam jawaban untuk pertanyaan ini.
Jawaban teratas saat ini adalah solusi sisi server yang menetapkan bendera di header http dan beberapa komentar menunjukkan bahwa solusi menggunakan tag meta tidak berfungsi.
Saya pikir entri blog ini memberikan gambaran yang bagus tentang bagaimana menggunakan informasi meta kompatibilitas dan dalam pengalaman saya bekerja seperti yang dijelaskan: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using/x- ua-kompatibel-untuk-membuat-tahan lama-perusahaan-web-aplikasi.aspx
Poin utama:
Satu poin penting (dan saya pikir banyak kebingungan berasal dari titik ini) adalah bahwa IE memiliki dua "kelas" mode:
Mode dokumen menentukan mesin rendering (bagaimana rendering halaman web).
Mode Browser menentukan string User-Agent (UA) yang dikirim IE ke server, apa Mode IE default untuk, dan bagaimana IE mengevaluasi Komentar Bersyarat.
Lebih lanjut tentang informasi tentang mode dokumen vs mode browser dapat ditemukan di artikel ini: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- situs-developers.aspx? Redirected = true
Dalam pengalaman saya, meta data kompatibilitas hanya akan memengaruhi mode dokumen . Jadi, jika Anda mengandalkan deteksi peramban, ini tidak akan membantu Anda. Tetapi jika Anda menggunakan deteksi fitur, ini harus menjadi jalan yang harus ditempuh.
Jadi saya akan merekomendasikan menggunakan tag meta (di halaman html) menggunakan sintaks ini:
<meta http-equiv="X-UA-Compatible" content="IE=9,10" ></meta>
Perhatikan: berikan daftar mode peramban yang telah Anda uji.
Posting blog juga menyarankan penggunaan EmulateIEX. Berikut kutipannya:
Yang sedang berkata, satu hal yang saya temukan aneh adalah ketika aplikasi meminta EmulateIE7, atau EmulateIE8. Mode ini meniru sendiri keputusan. Jadi, alih-alih secara spesifik tentang apa yang Anda inginkan, Anda meminta salah satu dari dua hal dan kemudian menentukan yang mana dari dua hal tersebut dengan mencari di tempat lain dalam kode untuk DOCTYPE (dan kemudian mencoba memahami apakah DOCTYPE akan memberikan Anda standar atau quirks tergantung pada isinya - tugas lain yang kadang membingungkan). Daripada melakukan itu, saya pikir lebih masuk akal untuk secara langsung menentukan apa yang Anda inginkan, daripada memberikan respons yang sendiri merupakan pertanyaan. Jika Anda menginginkan standar IE7, maka gunakan IE = 7, daripada IE = EmulateIE7. (Perhatikan bahwa ini tidak berarti Anda tidak boleh menggunakan DOCTYPE - Anda harus.)
Coba metatag ini:
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Seharusnya memaksa IE8 untuk merender sebagai Mode Standar IE8 bahkan jika "Tampilkan situs intranet dalam tampilan kompatibilitas" diperiksa [baik untuk intranet atau semua situs web], saya mencobanya sendiri di IE 8.0.6
Admin sistem kami menyelesaikan masalah ini dengan menghapus centang pada kotak secara global untuk organisasi kami. Pengguna bahkan tidak perlu keluar.
Saya menemukan jawaban yang memungkinkan untuk mengganti Tampilan Kompatibilitas Intranet yang dicentang. Cukup tambahkan acara OnInit pada halaman Anda pada baris ini (tidak perlu meta atau web.config customHeader):
Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");
Coba letakkan yang berikut ini di header:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Courtesy Paul Irish's HTML5 Boilerplate (tetapi berfungsi di XHTML Transitional, juga).
Saya dapat mengganti mode kompatibilitas dengan menetapkan tag meta sebagai THE TAG PERTAMA di bagian kepala, bukan hanya tag meta pertama tetapi sebagai dan hanya sebagai TAG SANGAT PERTAMA .
Terima kasih kepada @ stefan.s karena telah menjadikan saya jawaban yang sangat baik. Sebelum membaca yang saya miliki:
INI TIDAK BEKERJA
<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" >
memindahkan tag tautan dari tempatnya dan itu berfungsi
KARYA INI :
<head><meta http-equiv="x-ua-compatible" content="IE=9" >
Jadi klien IE8 yang diatur untuk menggunakan kompatibilitas menjadikan halaman sebagai mode Standar IE8 - konten = 'IE = 9' berarti menggunakan standar tertinggi yang tersedia hingga dan termasuk IE9.
Ini bukan solusi yang tepat, tetapi saya rasa ini adalah yang terbaik. Di situs intranet kami, kami memberi tahu orang-orang bahwa itu hanya dapat diakses oleh Firefox, kami tidak menghargai pengguna IE di sekitar sini. Periksa agen pengguna di sisi server atau klien dan tolak mereka akses dari IE. Dan saya seorang programmer .NET.
Saya telah berjuang dengan masalah ini dan ingin membantu memberikan solusi dan wawasan yang unik.
Kerangka kerja berbasis AJAX tertentu akan menyuntikkan javascripts dan stylesheet di awal <head>
dan melakukan hal ini tampaknya mencegah solusi meta tag yang sudah mapan bekerja dengan baik. Dalam hal ini saya menemukan bahwa secara langsung menyuntikkan ke header respons HTTP, seperti jawaban Andras Csehi yang akan menyelesaikan masalah.
Namun bagi kita yang menggunakan Java Servlets, cara yang baik untuk menyelesaikan ini adalah dengan menggunakan ServletFilter.
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 {
}
}
Kami dapat mengatasi masalah ini di lingkungan Spring-Apache-tomcat dengan menambahkan satu baris tunggal dalam metode RequestInterceptor -
//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;
}
Referensi dari - Cara membuat filter dan memodifikasi header respons. Ini mencakup bagaimana kita dapat menyelesaikan masalah ini melalui RequestInterceptor (Spring).
Jika Anda ingin situs Web Anda memaksakan mode standar IE 8, gunakan metatag ini bersama dengan DOCTYPE yang valid:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
Catat nilai "EmulateIE8" dan bukan "IE8".
Menurut IE devs, ini harus, "Tampilan Standar DOCTYPEs dalam mode Standar IE8; Tampilan Quirks DOCTYPEs dalam mode Quirks. Gunakan tag ini untuk mengganti tampilan kompatibilitas pada mesin klien dan memaksa Standar ke Standar IE8."
info lebih lanjut tentang posting blog IE ini: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx
Pertanyaan ini adalah duplikat dari mode browser Force "Internet Explorer 8" di intranet .
Tanggapan di sana menunjukkan bahwa tidak mungkin untuk menonaktifkan tampilan kompatibilitas (di sisi server) - https://stackoverflow.com/a/4130343/24267 . Tampaknya memang itulah masalahnya, karena tidak ada saran yang pernah saya coba yang berhasil. Di IE8, "Browser Mode" diatur ke Internet Explorer 8 Tampilan kompatibilitas apa pun header X-UA-Kompatibel yang Anda kirim.
Saya harus melakukan beberapa penanganan khusus untuk IE7 dan mode kompatibilitas, yang menyebabkan browser membuat menggunakan IE8 tetapi melaporkan itu adalah IE7, memecahkan kode saya. Ini adalah bagaimana saya memperbaiki kode saya (saya sadar ini adalah hack yang mengerikan dan saya harus menguji fitur bukan versi browser):
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) { // Pembohong, ini adalah IE8 dalam mode kompatibilitas. isIE8 = benar; }
Tambahkan ini di dalam tag kepala halaman Anda (menargetkan versi IE yang Anda inginkan):
<meta http-equiv="X-UA-Compatible" content="IE=8" />
Catatan, ini TIDAK akan mengubah fakta bahwa browser mengatakan itu dalam mode kompatibilitas (disebut mode browser), tetapi halaman akan dirender dalam mode standar IE8. Jika MASIH tidak menampilkan apa yang Anda inginkan, itu mungkin karena Anda memiliki javascript yang keliru memeriksa versi IE. Lihat posting blog berikut untuk menentukan properti mana yang harus Anda pilih karena meskipun Anda menetapkan tag meta X-UA-Compatible, string agen pengguna masih akan mengatakan MSIE 7.0 .
Dalam kasus saya, untuk perbaikan saya harus menambahkan cek untuk mode Kompatibilitas IE7. Saya melakukannya menggunakan kode javascript sederhana:
//IE8 and later will have the word 'trident' in its user agent string.
if (navigator.userAgent.indexOf("Trident")>-1) { //do something }
Bagi siapa pun yang membaca ini ingin menonaktifkan ini melalui GPO untuk semua pengguna, ini adalah pengaturan:
Konfigurasi Komputer / Template Administratif / Komponen Windows / Internet Explorer / Tampilan Kompatibilitas / Nyalakan Mode Standar Internet Explorer untuk Intranet Lokal
meskipun edit web.config memperbaikinya untuk saya.
Ubah header di .htaccess
BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
Temukan solusi untuk masalah ini di sini: https://github.com/h5bp/html5-boilerplate/issues/378
Komentar Stefan S tentang mode dokumen versus mode browser sangat relevan untuk masalah saya.
Saya memiliki data meta X-UA-Content di halaman, tetapi saya sisi klien sedang menguji versi browser melalui navigator.appVersion
. Tes ini tidak mencerminkan meta data karena memberikan mode browser bukan mode dokumen.
Jawaban bagi saya adalah untuk menguji document.documentMode
sesuatu seperti:
function IsIE(n)
{
if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
var sDocMode = document.documentMode;
return (isFinite(sDocMode) && sDocMode==n);
}
Sekarang, tag meta X-UA-Content saya tercermin dalam pengujian browser saya.
Mengapa saya melakukan hal yang tidak disukai saat menguji browser? Mempercepat. Berbagai add-in jQuery saya, seperti tablesorter terlalu lambat pada IE6 / 7, dan saya ingin mematikannya. Saya tidak yakin bahwa pengujian untuk fitur browser dapat membantu saya menyelesaikan ini sebaliknya.