Trả lời

31

Sau một tìm kiếm đầy đủ, tôi phát hiện ra làm thế nào để ngăn chặn thành công một trang web mạng nội bộ từ vẽ trong chế độ tương thích trong IE9 trên this blog:

Từ blog Tesmond của

có 2 quirks trong IE9 có thể gây ra chế độ tương thích ở lại hiệu ứng. Phần tử meta tương thích X-UA phải là phần tử meta đầu tiên trong phần đầu. Bạn không thể có các câu lệnh IE phụ thuộc trước phần tử meta Tương thích X-UA. Điều này có nghĩa là nếu bạn sử dụng HTML5 Boilerplate tuyệt vời của Paul Irish thì trên mạng nội bộ có cài đặt IE9 mặc định, trang web của bạn sẽ hiển thị ở chế độ tương thích. Bạn cần thay đổi khi bắt đầu soạn sẵn từ như sau: -

<!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 charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 

tới:

<!doctype html> 
<html class="no-js" lang="en"> 
<head> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta charset="utf-8"> 
+4

mức độ bị phá vỡ triệt để? Tôi không chắc đó là một cặp 'quirks' như một cặp 'lỗi'. :) Cảm ơn bạn đã chỉ cho tôi bài viết. – jinglesthula

+0

Điều đó không hiệu quả đối với IE8: ( –

+0

Tôi đã tìm thấy giải pháp cho sự cố hiển thị IE7 bên dưới, nếu bạn có thể sống với chế độ Tương thích ... – Timmah

3

Điều này có thể được thực hiện bằng cách thêm thẻ meta đơn giản

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

Một cách khác để thực hiện điều này là thêm mã này vào tập tin .htaccess của bạn!

# ---------------------------------------------------------------------- 
# Better website experience for IE users 
# ---------------------------------------------------------------------- 

# Force the latest IE version, in various cases when it may fall back to IE7 mode 
# github.com/rails/rails/commit/123eb25#commitcomment-118920 
# Use ChromeFrame if it's installed for a better experience for the poor IE folk 

<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 "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" > 
    Header unset X-UA-Compatible 
    </FilesMatch> 
</IfModule> 
+0

Chỉ cần thử thêm thẻ meta. Đã không khắc phục được sự cố và tôi không có quyền truy cập vào tệp htaccess của mình. Bạn có chắc thẻ meta sẽ hoạt động cho các trang web mạng nội bộ không? Tôi biết nếu sẽ làm việc cho các trang web thông thường, nhưng không chắc chắn về mạng nội bộ. – novicePrgrmr

+0

Bạn đã thử xóa tất cả các tệp Internet tạm thời của mình hoặc thậm chí thử nghiệm trên một máy tính khác? – Ruud

+0

Có, thử nghiệm nó trên máy tính khác thực sự. Tôi nghiên cứu thêm một chút, và tôi thực sự không thể ghi đè chế độ tương thích mạng nội bộ trong IE9. – novicePrgrmr

1

Nếu bạn có thể thêm mã vào trang web, bạn chỉ có thể thêm này:

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

để tiêu đề của trang web của bạn.

(Bạn cũng có thể sử dụng <meta http-equiv="X-UA-Compatible" content="IE=9"> để buộc IE9-Renderer) Điều này sẽ buộc IE9 hiển thị ở chế độ chuẩn.

Một cách khác là sử dụng một loại tài liệu: Đặt này lên đầu của mã của bạn:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
+1

Chỉ cần thử cả hai phương pháp IE-edge và IE-9. Không làm việc. Tôi cần phải đặt thẻ meta trong '' '' phải không? – novicePrgrmr

+0

Yeas, bên trong (bên dưới) thẻ ''. Nếu nó không hoạt động, hãy xóa tài liệu của bạn và thay thế bằng: '' – jAC

+0

Cái đầu tiên làm việc cho tôi, cảm ơn – ianbroad

4

Tiếp theo từ câu trả lời @ novicePrgrmr, có vẻ là một cách giải quyết cho IE9 Intranet tải trong IE7-mode . Trong khi điều này vẫn gây nên chế độ tương thích, tôi thấy một sửa đổi nhỏ để Paul Irish's HTML5 boilerplate markup ít nhất cho phép IE9 để render Intranet trong tiêu chuẩn IE9:

<!doctype html> 
<html class="no-js" lang="en"> 
<head> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta charset="utf-8"> 
</head> 
<!--[if lt IE 7]> <body class="home lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]>  <body class="home lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]>  <body class="home lt-ie9"> <![endif]--> 
<!--[if IE 9]>  <body class="home lt-ie10"><![endif]--> 
<!--[if gt IE 9]><!--> <body class="home"> <!--<![endif]--> 

    <p>content</p> 

</body> 
</html> 

này vẫn là HTML hợp lệ, và hiện CSS IE-cụ thể vẫn nên chỉ làm việc tốt, miễn là bạn nhắm mục tiêu IE bằng cách sử dụng .lt-ie thay vì html.lt-ie.

+0

yes điều này làm việc, bí mật là có các câu lệnh có điều kiện của bạn bên ngoài thẻ head của bạn. – uknowit2

Các vấn đề liên quan