Buộc chế độ tương thích IE tắt bằng thẻ


375

Tôi đang làm việc cho một khách hàng buộc chế độ tương thích trên tất cả các trang web mạng nội bộ. Tôi đã tự hỏi nếu có một thẻ tôi có thể đưa vào HTML của mình để tắt chế độ tương thích.


Tôi nghĩ rằng câu trả lời bạn đang tìm kiếm có ở đây: stackoverflow.com/questions/1014666/ Khăn
Gabriel

45
Thật ra tôi đang tìm kiếm điều hoàn toàn ngược lại, người đặt tiêu chuẩn của họ sang chế độ tương thích, điều đó thật điên rồ.
Al Katawazi

12
Javascript xấu trên một ứng dụng cũ bị lỗi trên bất kỳ thứ gì khác ngoài IE7, đó là người đặt tiêu chuẩn của họ thành khả năng tương thích. Một ngày nào đó, chúng ta sẽ đi xung quanh để thay thế nó ...
bỏ qua kẻ ngoại đạo

1
@ petethepagan-gerbil bạn đã đi xung quanh để thay thế nó? : P
icedwater

1
@ratedwater Tôi rời công ty hơn 6 năm trước :) Chúng tôi đã thực hiện những cải tiến nhỏ để loại bỏ các vấn đề bất cứ khi nào chúng tôi có thay đổi trong cùng lĩnh vực, nhưng nợ công nghệ không bao giờ được ưu tiên ở đó. Không biết cuối cùng nó đã được sửa chưa.
bại kẻ ngoại đạo

Câu trả lời:


535

Có chế độ "cạnh" .

<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>

Từ trang MSDN được liên kết:

Chế độ cạnh cho Windows Internet Explorer hiển thị nội dung ở chế độ cao nhất hiện có, điều này thực sự phá vỡ mô hình khóa của khóa Cameron. Với Internet Explorer 8, điều này tương đương với chế độ IE8. Nếu bản phát hành trong tương lai (giả thuyết) của Internet Explorer hỗ trợ chế độ tương thích cao hơn, các trang được đặt thành chế độ Edge sẽ xuất hiện ở chế độ cao nhất được phiên bản đó hỗ trợ; tuy nhiên, những trang tương tự vẫn sẽ xuất hiện trong chế độ IE8 khi được xem bằng Internet Explorer 8.

Tuy nhiên, chế độ "cạnh" không được khuyến khích sử dụng trong sản xuất:

Các nhà phát triển web nên hạn chế sử dụng chế độ Edge để kiểm tra các trang và các mục đích phi sản xuất khác vì có thể có kết quả bất ngờ về kết xuất nội dung trang trong các phiên bản Windows Internet Explorer trong tương lai.

Tôi thực sự không hiểu tại sao. Nhưng theo điều này, cách tốt nhất để đi vào lúc này là sử dụng IE=8.


7
Kể từ ngày 8/6/2012 Microsoft dường như đang sử dụng IE=10trên các trang web của riêng họ. Nếu bạn đã kiểm tra trang web của mình trong IE10 (phiên bản xem trước), thì an toàn khi sử dụng trang này; nếu không, bạn có thể muốn gắn bó IE=9với bây giờ.
calvinf

75
Tôi đã thấy rằng điều này KHÔNG hoạt động nếu người dùng (hoặc sysadmin) đã bật chế độ tương thích làm mặc định bằng cách truy cập Tools->Compatibility View Settingsvà kiểm tra Hiển thị tất cả các trang web trong Chế độ xem tương thích. Để khắc phục sự cố, tôi phải trả lại tiêu đề trong phản hồi HTTP:X-UA-Compatible: IE=edge
speedplane

10
+1 cho speedplane - Chế độ tương thích IE10 được BẬT theo mặc định cho các trang web mạng nội bộ - UGH ... cảm ơn vì đã tìm thấy!
viperguynaz

132
Lời khuyên cho những người tìm thấy câu trả lời này, nhưng không thể làm cho nó hoạt động cho họ. Thẻ meta khả năng tương thích PHẢI là thẻ meta đầu tiên và không thể có các câu lệnh điều kiện IE trước thẻ. Thêm: tesmond.blogspot.com/2011/10/ Mạnh
Chris Sobolewski

2
Cảm ơn Chris! Tôi đã vật lộn với điều này trong 30 phút khi cuối cùng tôi cũng đọc được bình luận của bạn. Tôi đã không có nó đầu tiên.
Hawkee

91

Sau nhiều giờ khắc phục sự cố công cụ này ... Dưới đây là một số điểm nổi bật nhanh đã giúp chúng tôi từ các X-UA-Compatibletài liệu: http://msdn.microsoft.com/en-us/l Library / cc288325 (VS85) .aspx # ctl00_contentContainer_ctl16

Sử dụng <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • Các chế độ Tác nhân người dùng chuẩn (những người không mô phỏng) bỏ qua các <!DOCTYPE>chỉ thị trong trang của bạn và hiển thị dựa trên các tiêu chuẩn được hỗ trợ bởi phiên bản IE đó (ví dụ: IE=8sẽ tuân thủ tốt hơn khoảng cách đường viền bảng và một số bộ chọn giả hơn IE=7).

  • Trong khi đó, các chế độ Giả lập yêu cầu IE tuân theo bất kỳ <!DOCTYPE>chỉ thị nào trong trang của bạn, hiển thị chế độ tiêu chuẩn dựa trên phiên bản bạn chọn và chế độ quirks dựa trênIE=5

  • Các giá trị có thể cho contentthuộc tính là:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"


67

Nếu bạn đang làm việc với một trang trong Vùng Intranet, bạn có thể thấy rằng IE9 bất kể bạn làm gì, sẽ chuyển sang chế độ Tương thích IE7.

Điều này là do cài đặt trong cài đặt Tương thích IE cho biết tất cả các trang Intranet sẽ chạy trong chế độ tương thích. Bạn có thể bỏ chọn điều này thông qua chính sách nhóm (hoặc chỉ đơn giản là bỏ chọn nó trong IE) hoặc bạn có thể đặt như sau:

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

Điều này hoạt động (như chi tiết trong các câu trả lời khác), nhưng ban đầu có thể không xuất hiện: nó cần phải đến trước khi các bảng định kiểu được khai báo . Nếu bạn không, nó sẽ bị bỏ qua.


3
cảm ơn vì đã cảnh báo về bản định kiểu, điều này đã gây ra vấn đề và tôi biết lý do ngay bây giờ!
eMRe

Đúng, ban đầu bị nghiền nát bởi vị trí. Cảm ơn đã thêm điều này.
John Moylan

Cảm ơn điều đó rất hữu ích. Họ có GPO, thiết lập mức IE hiệu quả ở mức 7 mặc dù IE 11 đã được cài đặt. Điều này giúp tôi không phải đặt một số miếng chêm vào trang web để làm cho js hoạt động.
Charles Owen

28

Tôi tin rằng điều này sẽ thực hiện các mẹo:

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

28

Như được đề xuất trong câu trả lời này cho một câu hỏi liên quan, chế độ "cạnh" có thể được đặt trong tệp Web.Config. Điều này sẽ làm cho nó áp dụng cho tất cả HTML được trả về từ ứng dụng mà không cần phải chèn nó vào các trang riêng lẻ:

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

Bước tương tự này cũng có thể được thực hiện bằng cách sửa đổi "Tiêu đề phản hồi HTTP" bằng Trình quản lý IIS cho máy chủ IIS, toàn bộ trang web hoặc các ứng dụng cụ thể.


19

Giải pháp thẻ meta không hoạt động đối với chúng tôi nhưng đặt nó trong tiêu đề phản hồi đã làm:

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

3
+1 cho 'chrome = 1'; Tôi chưa bao giờ biết về điều đó. Để biết giá trị của nó, việc thay đổi nó thành IE = 10 đã xóa một số vấn đề kết xuất trên trang web của tôi mà IE = edge không ảnh hưởng đến.

Giải thích về chrome=1tài sản, stackoverflow.com/a/22059516/368691 . Nghĩ rằng Chrome Frame đã ngừng hoạt động. blog.chromium.org/2013/06/retires-chrom-frame.html
Gajus

1
xem nhận xét về các câu trả lời khác ... Tôi thấy rằng điều này KHÔNG hoạt động nếu người dùng (hoặc sysadmin) đã bật chế độ tương thích làm mặc định bằng cách đi tới Công cụ-> Cài đặt Chế độ xem tương thích và kiểm tra Hiển thị tất cả các trang web trong Chế độ xem tương thích . speedplane 19 tháng 4 '13 lúc 11:29 7 Thẻ meta tương thích PHẢI là thẻ meta đầu tiên và không thể có các câu lệnh điều kiện IE trước thẻ. Thêm: tesmond.blogspot.com/2011/10/ Mạnh - Chris Sobolewski 19 tháng 8 '13 lúc 20:23
felickz

Tôi đã cố gắng đặt nó trên dòng đầu tiên trong trang bố trí. Nó không hoạt động, Stu đã đề cập đến việc thay đổi Tiêu đề phản hồi HTTP HTTP. Tôi đã thử. Tôi khởi động lại nhóm ứng dụng. Tôi kiểm tra thêm. Đây là trang được lồng dưới trang khác. Các trang khác không có meta khác. Đây là trang web sản xuất. Vì vậy, nhiều người đang truy cập trang này. đặt thẻ này lên hàng đầu là nhiệm vụ bất khả thi. Bất kỳ giải pháp nào khác hoặc tôi là vít
user12345

10

Chỉ cần thêm một vài ghi chú về chủ đề này dựa trên kinh nghiệm gần đây của tôi. Trường đại học tôi làm việc cho các vấn đề máy tính xách tay với IE 8 được đặt ở chế độ tương thích cho tất cả các Trang web Intranet. Tôi đã thử thêm thẻ meta để tắt chế độ này cho các trang được phục vụ bởi trang web của tôi nhưng IE luôn bỏ qua thẻ này. Như Lance đã đề cập trong bài đăng của mình, việc thêm tiêu đề phản hồi đã khắc phục vấn đề này. Đây là cách tôi đặt tiêu đề dựa trên phương pháp soạn sẵn 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>

Để tiêu đề này thực sự được gửi, bạn phải đảm bảo rằng bạn đã bật mod_headers trong Apache. Nếu bạn muốn chắc chắn rằng bạn đã bật mod này, hãy đặt nó vào một trang có thể chạy php:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>

Phương thức .htaccess hoạt động với tôi, trong IE8 + Nó đã loại bỏ nút tương thích (còn gọi là Kẻ thù số 1) và buộc IE8 tránh sử dụng chế độ tương thích. Liên quan: Thay thế thẻ meta dường như chỉ hoạt động trong các điều kiện nhất định (IE Voodoo) trên các máy tính khác nhau.
William Isted

10

IE8 mặc định ở chế độ tiêu chuẩn cho chế độ intERnet và quirks cho intRAnet. Thẻ meta HTML bị bỏ qua nếu bạn có tập tài liệu được đặt thành xhtml chuyển tiếp. Giải pháp là thêm một tiêu đề HTTP trong mã. Điều này làm việc cho chúng tôi. Bây giờ trang web mạng nội bộ của chúng tôi đang buộc IE8 hiển thị ứng dụng ở chế độ tiêu chuẩn.

Đã thêm vào PageInit của lớp trang cơ sở (ASP.net C #):

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

tham khảo: http://ilia.ws/archives/196-IE8-X-UA-Compiverse-Rant.html


3

Điều này là do cài đặt trong cài đặt Tương thích IE cho biết tất cả các trang Intranet sẽ chạy trong chế độ tương thích. Bạn có thể bỏ chọn điều này thông qua chính sách nhóm (hoặc chỉ đơn giản là bỏ chọn nó trong IE) hoặc bạn có thể đặt như sau:

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

Rõ ràng không thể thay đổi cài đặt chế độ xem tương thích dưới dạng chính sách nhóm nhưng đó là thứ có thể thay đổi trong sổ đăng ký, thẻ meta này hoạt động tốt với tôi, tôi phải làm cho thuộc tính bắt buộc hoạt động như một phần của biểu mẫu html , nó hoạt động trong chrome và firefox nhưng không phải IE.

Dưới đây là một hình ảnh đẹp về những gì trình duyệt hỗ trợ cho từng phần tử html 5 riêng lẻ.

http://html5readiness.com/

Lưu ý một mẫu số chung Google Chrome, nó hỗ trợ mọi thứ. hi vọng đó là sự giúp đỡ


Có vẻ như Firefox và IE 10 hiện cũng hỗ trợ mọi thứ. Biểu đồ không làm cho điều đó rõ ràng như đối với Chrome.
Tony L.

0

Chèn như là mục đầu tiên dưới thẻ.

Điều này buộc IE hiển thị trang trong phiên bản vật lý của IE và nó bỏ qua cài đặt "Chế độ" của Trình duyệt. Điều này có thể được đặt trong các công cụ dành cho nhà phát triển, hãy thử thay đổi nó thành phiên bản IE cũ hơn để kiểm tra, điều này nên được bỏ qua và trang sẽ trông giống hệt nhau.


0

Nếu bạn có quyền truy cập vào máy chủ, cách đáng tin cậy nhất để thực hiện việc này là thực hiện trên chính máy chủ, trong IIS. Đi vào tiêu đề phản hồi HTTP HTTP. Thêm tên: X-UA-Tương thích
giá trị: IE = edge Điều này sẽ ghi đè trình duyệt và mã của bạn.


Điều này đặt lại khi triển khai mới vào IIS nếu được đặt ở cấp trang web
Eman Forge

0

Nếu bạn muốn mỗi trang web riêng lẻ tải nội dung đã chọn và đang sử dụng asp.net. Chỉ cần áp dụng nó làm thẻ đầu tiên bên dưới thẻ tiêu đề trong Lượt xem> được chia sẻ> Layout.cshtml

chỉ là một mẹo

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.