IE10 kết xuất ở chế độ IE7. Làm thế nào để buộc chế độ Tiêu chuẩn?


121

Trên trang của microsoft, họ cho rằng chỉ cần khai báo kiểu tài liệu đơn giản là đủ. Nhưng ngay cả một tài liệu ngắn như thế này cũng rơi trở lại chế độ IE7:

<!DOCTYPE html>
<html>
<head>
   <title></title>
</head>
<body>

</body>
</html>

http://d.pr/i/fvzb+

Câu trả lời:


244

Internet Explorer đưa ra giả định rằng hầu hết các trang web được viết để nhắm mục tiêu các phiên bản IE trước đó và xem xét loại tài liệu, thẻ meta và HTML để xác định chế độ tương thích tốt nhất (đôi khi không chính xác). Ngay cả với loại tài liệu HTML5, IE vẫn sẽ đặt trang web của bạn ở chế độ tương thích nếu đó là trang mạng nội bộ.

Để đảm bảo rằng trang web của bạn luôn sử dụng chế độ tiêu chuẩn mới nhất, bạn có thể đảm bảo rằng bạn Display intranet sites in Compatiblyđã tắt. Tuy nhiên, bạn phải thực hiện việc này trên từng máy cục bộ với máy chủ web (hướng dẫn bên dưới).

Ngoài ra, và tốt hơn nữa, bạn có thể sử dụng X-UA-Compatibletiêu đề để tắt tính năng này khỏi máy chủ. Điều quan trọng cần lưu ý là sử dụng thẻ meta sẽ không hoạt động!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

Trong suốt MSDN, người ta đã đề cập rằng việc sử dụng tiêu đề máy chủ hoặc thẻ meta sẽ ghi đè ngay cả các trang web mạng nội bộ. Bài viết Tìm hiểu các chế độ tương thích trong Internet explorer 8 nói như sau.

Một số lượng lớn các trang web doanh nghiệp nội bộ được tối ưu hóa cho Internet Explorer 7, do đó, ngoại lệ mặc định này duy trì khả năng tương thích đó. ... Một lần nữa nếu thẻ Meta hoặc tiêu đề http được sử dụng để đặt chế độ tương thích cho tài liệu, nó sẽ ghi đè các cài đặt này.

Tuy nhiên, trong thực tế, điều này sẽ không hoạt động, sử dụng tiêu đề máy chủ lưu trữ là tùy chọn duy nhất hoạt động. Phần bình luận của bài báo cũng cho thấy nhiều ví dụ về vấn đề chính xác này.

Việc sử dụng thẻ Meta cũng có một số vấn đề khác như bỏ qua thẻ nếu nó không nằm ngay dưới <head>thẻ hoặc nếu có quá nhiều dữ liệu trước thẻ (4k). Nó cũng có thể kích hoạt tài liệu được xem lại trong một số phiên bản IE, điều này sẽ làm chậm quá trình hiển thị. Bạn có thể đọc thêm về những vấn đề này tại bài viết MSDN Phương pháp hay nhất: Sắp xếp HEAD của bạn .

Thêm tiêu đề X-UA-Tương thích

Nếu bạn đang sử dụng .NET và IIS, bạn có thể thêm điều này vào web.config, bạn cũng có thể thực hiện việc này theo chương trình:

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

Nếu bạn không sử dụng IIS, bạn có thể dễ dàng thực hiện bằng bất kỳ ngôn ngữ nào. Ví dụ, đây là cách thực hiện trong PHP:

header('X-UA-Compatible: IE=edge');

Miễn là X-UA-Compatibletiêu đề xuất hiện cùng với loại tài liệu HTML5, một trang web sẽ luôn chạy ở chế độ tiêu chuẩn mới nhất.

Tắt Chế độ xem tương thích
Có thể vẫn hữu ích nếu tắt Chế độ xem tương thích. Để làm như vậy, hãy bỏ chọn Display all intranet sites in compatibility viewtrong Cài đặt Chế độ xem Tương thích.

Thiết lập chế độ xem tương thích

Bạn có thể hiển thị điều này bằng cách nhấn Altđể nhận menu.

nhập mô tả hình ảnh ở đây

Chỉnh sửa Câu trả lời này cũng liên quan đến IE9.


Xin lỗi vì sự thiếu hiểu biết của tôi, nhưng làm thế nào để truy cập trang Cài đặt này? Tôi đã kiểm tra cài đặt Internet explorer, nhấp chuột phải vào chế độ xem tương thích trong thanh địa chỉ - không có gì.
fireev

2
Sử dụng @Nick altđể đưa lên thanh công cụ, nó dưới công cụ -> Cài đặt xem compat
Daniel bé

Oh cảm ơn bạn, có vẻ như nó đã giải quyết nó. Khiến người ta tự hỏi tại sao họ lại làm vậy.
fireev

25
+1000;). VẬY nên buộc mọi OP xem câu trả lời này, khi họ có bất kỳ thẻ [IE] nào và một từ "tương thích" trong câu hỏi của họ, ngay cả trước khi họ thực sự đăng câu hỏi đó.
Teemu

2
Tôi đã thử thêm phần tiêu đề tùy chỉnh vào web.config của dự án. Có vẻ như cài đặt này không ghi đè cài đặt IE để sử dụng chế độ xem tương thích cho các trang mạng nội bộ.
DomenicDatti

25

Điều này phù hợp với tôi ..

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

11
NB như Lavinski đã nói ở trên, "thẻ meta không có tác dụng gì đối với các trang mạng nội bộ."
Nathan

2
Đối với những gì nó đáng giá, đối với một trang web được lưu trữ (trang web không phải mạng nội bộ) có X-UA-Compatiblethẻ meta, nhưng vẫn không kích hoạt chế độ tài liệu Tiêu chuẩn IE10 làm Trang mặc định, tôi nhận thấy rằng nếu thẻ meta nằm bên dưới thẻ tập lệnh hoặc chỉ quá xa so với đỉnh của <head>cây DOM, IE10 kêu lên và đặt chế độ tài liệu thành Tiêu chuẩn IE8. Vì vậy, hãy giữ IE=edgethẻ meta của bạn đóng <title>thẻ. Không phải lúc nào cũng là một giải pháp đơn giản cho các trang Wordpress khi nó không được mã hóa cứng trong tệp mẫu tiêu đề. Không chắc IE11 có quan tâm đến vị trí của thẻ meta hay không, nhưng hy vọng điều này sẽ hữu ích cho ai đó.
purefusion

1
Đối với bản sao mù và các mục sư chẳng hạn như tôi, điều đó thiếu thẻ đóng. . <meta http-Equiv = "X-UA-Tương thích" content = "IE = edge"> </meta>
John Newman

Bạn chỉ cần phải đóng các thẻ meta nếu bạn đang sử dụng các loại tài liệu XHTML
Andy Brudtkuhl

2
Ngoài ra, thẻ này cần phải là thẻ đầu tiên bên trong <head>
Chris Gunawardena

10

Hãy thử thêm thẻ sau vào đầu

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />

5
Điều đó sẽ được IE=Edgethay
Daniel Ít

1
Nhưng có một nguy cơ rằng các phiên bản tương lai của IE làm điều gì đó xấu và phá vỡ trang web của bạn
Jeow Li Huân

7
Không, đó không phải là rủi ro nếu bạn làm theo thông số kỹ thuật, bạn không thấy mọi người làm điều đó cho chrome.
Daniel Little

1
Thẻ này cần phải là thẻ đầu tiên bên trong <head>
Chris Gunawardena

1
Việc chỉnh sửa câu trả lời này giải thích tại sao đây không phải là một ý kiến ​​hay. Câu trả lời được chấp nhận là giải pháp tốt nhất.
David Granado

2

Thẻ meta không có tác dụng gì đối với các trang web mạng nội bộ và vấn đề của tôi là IE10 hiển thị ở chế độ tương thích IE10. Điều giải quyết vấn đề đối với tôi là tiếp tục câu trả lời của @ Jeow và sử dụng giá trị đó trong tiêu đề http bằng cách thêm phần sau vào web.configtrong IIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

Đối với các mục đích của IE, các trang mạng nội bộ bao gồm các trang công khai không được định tuyến ra bên ngoài - ví dụ: một nhân viên của Stackoverflow làm việc tại văn phòng có thể sẽ thấy stackoverflow.com ở chế độ tương thích.


1

Nó hoạt động hoàn hảo cho tôi khi tôi làm theo cách sau:

Trên http://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

Đã sử dụng ví dụ chính xác mà họ cung cấp trong hộp đầu tiên (đã thêm phần còn thiếu </html> ở dưới cùng), mở nó trong IE10 và các tiêu chuẩn bị bắt buộc, tôi nghĩ bạn có thể cần nội dung thực tế trong html để nó buộc các tiêu chuẩn không chắc chắn.

Đề xuất của tôi là thay thế mã trống của bạn bằng nội dung thực tế (một cái gì đó đơn giản) và xem nó có tác dụng gì.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.