2009-05-04 27 views
23

Tôi muốn chỉ cho phép người sử dụng với IE8 (không IE6, IE7) hoặc trình duyệt khác để truy cập trang web của tôi khi đăng nhậpLàm cách nào để hiển thị thông báo cho trình duyệt IE6/IE7 để nâng cấp lên IE8 và IE8 không hiển thị cảnh báo IE7? .

Tôi đi theo: http://code.google.com/p/ie6-upgrade-warning/ Nhưng tôi cũng muốn nó không cho phép người dùng IE7 để sử dụng chính trang web khi đăng nhập (họ có thể xem trang công cộng). Lý do là ứng dụng web chính có rất nhiều hiệu ứng JavaScript sẽ chỉ hoạt động 100% ở chế độ hiển thị IE8 (hoặc bất kỳ trình duyệt nào khác ngoài IE).

Vấn đề với việc sửa đổi cảnh báo nâng cấp ie6 thành ie7 là có vẻ như IE8 đã hiển thị trang web của tôi trong một chế độ hiển thị IE7 và "nằm" về việc làm tức là7 và kích hoạt mã định kiểu IE7.

Vậy làm cách nào để buộc IE8 luôn hiển thị trang của tôi ở chế độ IE8?

+9

Bạn thực sự muốn loại trừ khoảng 40-50% người dùng trên thế giới? Nghiêm túc? – cletus

+0

Bạn chưa chỉ định ngôn ngữ lập trình nào bạn muốn thực hiện việc này. –

+2

FYI: Thị phần trình duyệt hiện tại - http://www.w3schools.com/browsers/browsers_stats.asp – STW

Trả lời

24

Sử dụng thẻ này:

<meta http-equiv="X-UA-Compatible" content="IE=8" /> 
+1

Có, điều đó sẽ buộc IE8 phải hiển thị trang web của mình ở chế độ IE8 và gây ra JavaScript và các chú thích có điều kiện để báo cáo IE8. Về phía máy chủ, kiểm tra "Trident 4.0" trong tiêu đề tác nhân người dùng cũng hợp lệ. Thường thì chúng tôi đề nghị mọi người sử dụng "IE = EmulateIE8" chỉ để đảm bảo rằng mọi trang chế độ Quirks không vô tình bị ép buộc vào chế độ Chuẩn, nhưng áp phích này có vẻ giống như một người nghiện chuẩn và không có khả năng sử dụng các trang Chế độ Quirks . – EricLaw

0

Bạn có thể sử dụng CSS Comments Conditional

<!--[if IE 8]> 
Special instructions for IE 6 here 
<![endif]--> 
+0

Và làm gì, sử dụng CSS để ẩn tất cả các phần tử trên trang? CSS không thể hạn chế quyền truy cập. –

+0

@AdamSane - Đây chỉ là những nhận xét có điều kiện - không cần đến bit 'CSS'. @Chad - Không cần hạn chế quyền truy cập - chỉ hiển thị cảnh báo và ẩn mọi thứ có thể gây nhầm lẫn cho người dùng. Nếu người dùng có thể phá vỡ một cái gì đó bằng cách không có JavaScript làm việc/làm việc một cách chính xác, sau đó có một vấn đề với các ứng dụng. – Tom

1

Phụ thuộc vào cách bạn đã mã hóa (X) HTML của bạn, nhưng IE8 nên sử dụng chế độ tiêu chuẩn (không phải chế độ IE7) nếu bạn có một DOCTYPE nghiêm ngặt như:

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

ở đầu tệp HTML của bạn.

XHTML 1.0 Specs - Strictly Conforming Documents

Dưới đây là một bài viết tốt về cách doctypes khác nhau/etc ảnh hưởng đến chế độ dựng hình của IE8: Understanding Compatibility Modes in Internet Explorer 8

+0

Không chính xác. Bất cứ ai cũng có thể kích hoạt chế độ tương thích của IE8 bất cứ lúc nào bằng cách nhấp vào biểu tượng trang bị hỏng. – NotMe

13

Correction để dụ AdamSane của:

<!--[if lt IE 8]> Special instructions for IE 7 or less here <![endif]-->

+1

Điều này sẽ không hoạt động nếu trang ở chế độ Chế độ xem tương thích.Trong chế độ đó, IE8 sử dụng thông tin phiên bản IE7 cho các nhận xét có điều kiện. – EricLaw

-2

Ý tưởng rất rằng bạn đang "cấm" IE 6 và 7 người dùng từ trang web của bạn là vô lý . Rất nhiều người không thể nâng cấp trình duyệt của họ hoặc cài đặt trình duyệt khác vì giới hạn công việc hoặc vì họ không biết cách thực hiện. Chặn những người này sử dụng trang web của bạn sẽ chỉ mất phí cho người dùng trong thời gian dài.

Hãy sửa lỗi JavaScript của bạn, khắc phục sự cố hoặc giảm độ phân giải để trang web hoạt động tốt ngay cả khi nó bị tắt.

EDIT: Tôi gửi một số thông tin trong một bình luận dưới đây mà thực sự phải ở trong bài này:

Nó thường có thể phát hiện IE và làm việc xung quanh nó. Địa ngục, bạn thậm chí có thể sử dụng bình luận có điều kiện để tải phiên bản JavaScript khác. Sử dụng một khung công tác JS sẽ trừu tượng hóa sự khác biệt giữa các trình duyệt ở mức bạn không cần phải lo lắng. Hoặc chỉ cần lấy IE7.js và dán trên trang web - tôi nghe nó làm cho mọi thứ hoạt động như bạn sẽ không tin.

+3

Thật khó để sửa lỗi JavaScript của bạn khi bạn phải tuân thủ các tính năng hoặc tiêu chuẩn trung lập - IE thích có cách giải thích riêng về mã tiêu chuẩn, thường khiến bạn hỗ trợ IE hoặc phần còn lại. – STW

+3

Ngoài ra, tôi khá chắc chắn rằng anh ta không cấm họ từ trang web, nhưng nói với họ rằng nếu họ đang sử dụng IE6/7 họ có thể cũng không cố gắng. Cảnh báo người dùng của bạn rằng khách hàng không tương thích của họ không được hỗ trợ là mã phòng thủ tốt. – STW

+0

Thường có thể phát hiện IE và làm việc xung quanh nó. Địa ngục, bạn thậm chí có thể sử dụng bình luận có điều kiện để tải phiên bản JavaScript khác. Sử dụng một khung công tác JS sẽ trừu tượng hóa sự khác biệt giữa các trình duyệt ở mức bạn không cần phải lo lắng. Hoặc chỉ cần lấy IE7.js (http://code.google.com/p/ie7-js/) và dán nó trên trang web - tôi nghe nó làm cho mọi thứ hoạt động như bạn sẽ không tin. –

0

Sử dụng javascript bạn có thể hỏi mà trình duyệt đã gửi yêu cầu>

<script type="text/javascript"> 
function detectBrowser() 
{ 
var browser=navigator.appName; 
var b_version=navigator.appVersion; 
var version=parseFloat(b_version); 
if (browser=="Microsoft Internet Explorer") 
    && (version>=8)) 
    { 
    alert("Your browser is good enough!"); 
    } 
    else 
    { 
    alert("It's time to upgrade your browser!"); 
    } 
    } 
</script> 
+0

Điều này sẽ không hoạt động nếu trang ở chế độ xem tương thích . Trong chế độ đó, IE8 sử dụng thông tin phiên bản IE7 cho các nhận xét có điều kiện và tác nhân người dùng JavaScript. – EricLaw

1

Có lẽ cách tốt nhất là để phát hiện trình duyệt User-Agent chuỗi của người dùng và chuyển hướng họ tới một trang yêu cầu họ nâng cấp (hoặc tải xuống một trình duyệt khác như firefox hoặc chrome) nếu họ đang sử dụng phiên bản cũ của IE. Bạn có thể xem ví dụ về các tác nhân người dùng của IE 7 và 8 trên số IE developer blog entry này. Các phiên bản cũ của IE theo một mẫu tương tự.

Một điều bạn không nên làm, tuy nhiên, giả định rằng bất kỳ chuỗi tác nhân người dùng nào không tuân theo một mẫu nhất định không hợp lệ. Chỉ cần kiểm tra MSIE ([0-9]) và xem nó có nằm trong phạm vi không; nếu nó thiếu hoàn toàn, giả sử trình duyệt được hỗ trợ. Nếu đó là MSIE 7, sau đó kiểm tra thêm dấu Trident cho biết chế độ tương thích (và, tôi giả sử, yêu cầu người dùng tắt nó đi). Điều này sẽ cho phép, trình duyệt mới nổi khác trong tương lai để có cơ hội chiến đấu tại render trang của bạn mà không cần chuyển chúng đi ở cửa :)

1

Như đã đề cập tôi muốn đề nghị cách tốt nhất để đạt được điều này là sử dụng ý kiến ​​có điều kiện để include một stylesheet cụ thể đối với tất cả các phiên bản của IE sớm hơn 8:

<!--[if lt IE 8]> Include CSS here <![endif]--> 

CSS bao gồm có thể thiết lập một cảnh báo để được nhìn thấy hoặc có lẽ cho phép một lớp phủ trên trang mà 'khóa' người dùng ra ngoài. Nó có thể là một ý tưởng tốt để bao gồm một số quy tắc mà ẩn các yếu tố quan trọng trên trang mà nếu không có thể gây nhầm lẫn cho người dùng nếu họ không làm việc như dự định.

Tùy chọn khác của bạn là chuyển hướng người dùng đến trang khác - Tôi không phải là người hâm mộ lớn của các chuyển hướng nhưng nếu được sử dụng cẩn thận, chúng có thể là giải pháp phù hợp.

Bạn đã xem xét lý do tại sao bạn đang khóa một lượng lớn người dùng ra khỏi trang web của mình? Có thể bạn nên dành thời gian để tìm ra cách làm giảm hoặc giảm bớt một cách duyên dáng mã JavaScript của bạn, hoặc ngược lại; 'tăng cường dần dần' với JavaScript.

Mặt khác, bạn có thể kiểm soát các hệ thống được tổ chức sử dụng bằng cách sử dụng trang web của bạn, trong trường hợp đó, bạn có thể OK khóa mọi người ra ngoài để sử dụng các hệ thống không chuẩn.

4

Cá nhân tôi sẽ khuyên người dùng nâng cấp IE vì lý do bảo mật. Tôi sẽ sử dụng bình luận có điều kiện để nhắm mục tiêu các trình duyệt bên dưới IE8.

 <!--[if lt IE 8]>You are using an outdated version of Internet Explorer. For security reasons you should upgrade your browser. Please go to Windows Updates and install the latest version.<![endif]--> 

Thông báo này không phô trương nhưng mang tính duyên dáng. Bạn cũng nên làm cho trang web có thể sử dụng được cho những người không thể nâng cấp trình duyệt của mình.

4

Thay vì cố gắng ép buộc chế độ IE 8+, tôi sử dụng kết hợp các nhận xét có điều kiện và kiểm tra javascript đơn giản. Thuộc tính document.documentMode đã được thêm vào IE trong phiên bản 8, vì vậy nếu nó tồn tại ở tất cả (bất kể giá trị, mặc dù nó phải là 7 với mã này) thì có nghĩa là chúng tôi đang ở chế độ tương thích và không hiển thị cảnh báo:

<!--[if lte IE 7]> 
    <script> 
     if (!document.documentMode) { //if documentMode exists, this is a later IE in compatibility mode 
      showBadBrowserMessage(); 
     } 
    </script> 
<![endif]--> 
0

Tiệc này có kết thúc không? > <

Đó là, nhưng tôi nghĩ thông tin ở đây có thể được cập nhật một chút.

Theo các tiêu chuẩn ngày nay, "hôm nay" là ngày 29 tháng 10 năm 2013, bạn có thể sử dụng thẻ meta này để kích hoạt trình duyệt và văn bản chế độ mới nhất của IE và kích hoạt quá trình cài đặt của Frame Chrome của Google trong IES cũ:

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

Điều này cho phép bạn định dạng kiểu máy chủ IE6/7 cụ thể. Hãy nhớ rằng tôi đang nói 'style' not 'style sheets', có nghĩa là: Bạn chỉ sử dụng một tệp CSS duy nhất và trong đó là tất cả các phong cách IE6 và IE7 của bạn. Điều này là để giảm thiểu các yêu cầu HTTP ... nhưng đó là một cuộc trò chuyện hoàn toàn khác.

Dù sao, với đoạn mã trên, không cần tập lệnh hoặc Nhận xét có điều kiện.

Lưu ý: Google Chrome Frame sẽ ngừng hoạt động vào tháng 1 năm 2014 - more info here.

3

Đây là kịch bản này mát mẻ mà làm việc cho tất cả các trình duyệt cũ:

<script type="text/javascript"> 
    var $buoop = {vs:{i:7,f:5,o:12,s:5,n:9}}; 
    $buoop.ol = window.onload; 
    window.onload=function(){ 
    try {if ($buoop.ol) $buoop.ol();}catch (e) {} 
    var e = document.createElement("script"); 
    e.setAttribute("type", "text/javascript"); 
    e.setAttribute("src", "//browser-update.org/update.js"); 
    document.body.appendChild(e); 
    } 
</script> 

Lưu ý: Nếu khách truy cập bỏ qua những lời khuyên, nó sẽ không xuất hiện trở lại trong một thời gian.

Có thể tìm thấy thêm: here

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