2012-10-29 27 views
8

Tôi đang phát triển một số loại thư viện JavaScript. Và tôi gây ra vấn đề mà tôi có một số vấn đề cụ thể cho: Trình duyệt: IE8/IE9 và Chế độ Tài liệu: IE7 Tôi tìm thấy giải pháp, nhưng tôi không muốn sử dụng nó trong mọi tình huống và muốn sử dụng nó ngay khi tôi có tình huống được mô tả ở trên. Tôi biết rằng tôi có thể nhận ra trình duyệt bằng cách sử dụng:Cách tải trình duyệt "Chế độ tài liệu"

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1; 

Nhưng tôi nhận ra chỉ là phiên bản trình duyệt theo cách như vậy nhưng không phải là chế độ tài liệu, và tôi không muốn sử dụng giải pháp của tôi khi tôi có, ví dụ, trình duyệt chế độ IE8 và chế độ tài liệu IE 8. Có cách nào để lấy chế độ tài liệu trang trong IE không? Cảm ơn trước.

Trả lời

27

Bạn có thể sử dụng document.documentMode để trả lại chính xác chế độ tài liệu mà IE đang sử dụng.

Có nghĩa là nếu bạn đã đặt chế độ trình duyệt thành IE9, nhưng chế độ tài liệu của bạn thành IE8, nó sẽ trả về document.documentMode == 8 (trong khi chuỗi userAgent sẽ vẫn hiển thị dưới dạng IE9). Điều này đặc biệt hữu ích nếu JS của bạn đã bao gồm các thay đổi về kiểu dáng vì nó là chế độ tài liệu xác định cách trình duyệt IE hiển thị một trang, không phải là chế độ trình duyệt. Chế độ tương thích thực sự chỉ thay đổi chế độ tài liệu (thường là IE7).

Trong vài trường hợp tôi đã cần thiết để Tôi vừa mới sử dụng một cái gì đó như thế này để phân biệt của IE:

if (document.documentMode == 7) { 
    doSomethingIn.IE7_only; 
} else { 
    doSomething.everwhereElse; 
} 

Hy vọng rằng sẽ giúp một số.

+0

Tôi có thể đặt chế độ tài liệu không. Giả sử nếu (document.documentMode == 8) {đặt document.documentmode thành bất kỳ giá trị nào} –

+0

Rất tiếc, bạn không thể đặt nó bằng javascript. Nhưng bạn có thể sử dụng thẻ meta x-ua-compatability để chỉ định một chế độ IE mong muốn. Lưu ý rằng nó sẽ hoạt động trên các phiên bản cũ của IE (ví dụ: không phải IE11 +). Đọc phần này để biết thêm thông tin: http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

Lưu ý rằng 'document.documentMode' chỉ được hỗ trợ trong IE8 +, vì vậy bạn ' sẽ cần thêm 'tính năng phát hiện' nếu bạn cần nhắm mục tiêu hiển thị gốc IE7. – WynandB

1

Tôi không biết cách truy xuất chế độ tài liệu , nhưng bạn nên giải quyết vấn đề theo cách cơ bản hơn. Giả sử bạn muốn sử dụng document.querySelector trong tập lệnh của mình. Điều đó sẽ thất bại trong IE8/document mode IE7 Standards. Vì vậy, một kiểm tra bổ sung cho sự tồn tại của bản thân document.querySelector sẽ là giải pháp:

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
     && document.querySelector; //=> IE8 and Docmode IE7 => false 

Tìm thấy một cách để kiểm tra các chế độ tài liệu: sử dụng document.documentMode. Nó trả về một số nguyên (vì vậy 7 cho chế độ tài liệu chuẩn IE7), 5 cho Quirks mode. Nó sẽ là undefined cho các trình duyệt không phải của IE.

+0

Có thx đó là ý tưởng tốt, nhưng tôi không có lỗi javascript hoặc một số chức năng bị bỏ lỡ Tôi chỉ có một số hành vi khác nhau của các chức năng tương tự trong chế độ tài liệu khác nhau. Như một cách khác để sử dụng giải pháp của bạn có thể bạn biết một số chức năng mà sẽ không hoạt động dưới "DocumentMode IE7"? Nếu tôi tìm thấy chức năng như vậy tôi có thể sử dụng nó để nhận ra chế độ tài liệu. – Mikhail

+0

Vâng, 'document.querySelector' không hoạt động trong docmode IE7;). Dù sao, tìm thấy một tài sản IE tài liệu hữu ích, xem câu trả lời được cập nhật. – KooiInc

+0

Lưu ý rằng document.documentMode chỉ được hỗ trợ trong IE8 +, vì vậy bạn sẽ cần thêm 'tính năng phát hiện' nếu bạn cần nhắm mục tiêu hiển thị gốc IE7. – WynandB

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