Làm thế nào để biết một trình duyệt có ở chế độ quirks trên không?


128

Giả sử bạn có một trang có tài liệu tương đối nghiêm ngặt và đánh dấu HTML khá gần với tuân thủ, nhưng có thể bỏ lỡ theo một số cách ngớ ngẩn, có lẽ vì nội dung người dùng nằm ngoài tầm kiểm soát của bạn ... nói rằng bạn đang làm việc trên một nội dung hệ thống quản lý hoặc chủ đề cho hệ thống quản lý nội dung nơi bạn kiểm soát một số cấu trúc cơ bản và cần một số javascript, nhưng bạn không chịu trách nhiệm cho mọi thứ khác đi vào các trang.

Làm thế nào bạn có thể nói (hoặc: điều gì sẽ xác định) khi trình duyệt quyết định chuyển sang chế độ "quirks" thay vì sử dụng công cụ tuân thủ tiêu chuẩn hơn?

Tôi đang tìm kiếm câu trả lời cho từng trình duyệt chính, vì IE, Chrome, Safari và Firefox tất nhiên sẽ xử lý khác nhau. Là một lỗi duy nhất đủ để buộc nó hoặc bạn có một số chậm trễ?

Câu trả lời:


159

Trong Firefox và Opera, bạn có thể xác định xem trình duyệt của mình có ở "chế độ quirks" hay không bằng cách kiểm tra thông tin trang.

Sử dụng document.compatMode, sẽ cho bạn biết chế độ bạn đang sử dụng với hầu hết các trình duyệt.

Trong Chrome, Safari và IE , hãy chạy javascript này trên thanh địa chỉ:

 javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')

(lưu ý rằng bạn sẽ cần nhập lại javascript:phần sau khi dán vào thanh địa chỉ của mình, do những thay đổi bảo mật gần đây)


Có một giá trị tiềm năng khác trong IE mà tôi đã gặp khi buộc một trang cũ vào chế độ "EDGE". Giá trị là "BackCompat"
Greg Woods

Tôi cũng đã nhận được BackCompat trong Chrome khi đặt DOCTYPE thành thứ gì đó hoàn toàn không hợp lệ. Theo mã trong câu trả lời này, nếu giá trị là bất cứ thứ gì khác ngoài CSS1Compat, thì nó ở chế độ quirks. Điều đó có thực sự đúng không? Tất cả các giá trị có thể là gì?
still_dreaming_1

Rõ ràng BackComp Tương thích là giá trị tiêu chuẩn cho chế độ "quirks" / "tương thích". Chỉ có 2 giá trị: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

Khi bạn có thể truy vấn chế độ kết xuất trong JavaScript, bạn có thể có Bookmarklet sẽ cho bạn biết chế độ kết xuất mà trang đang sử dụng.

Tôi tìm thấy bookmarklet chế độ kết xuất này hoạt động tốt cho tôi:

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');

11

Câu trả lời đầy đủ cho câu hỏi cụ thể thực tế của bạn về 'Một lỗi duy nhất có đủ để buộc nó hoặc bạn có một chút chậm trễ không?' Là nó hoàn toàn phụ thuộc vào lỗi. Ví dụ,

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

sẽ buộc chế độ quirks trong IE 6 & 7 mặc dù không thực sự là một lỗi (họ chỉ ném tổng số lung lay khi dòng đầu tiên của tệp không phải là một tuyên bố). Một danh sách nhanh các loại / quirks có thể được tìm thấy ở đây

Hãy thử dán dòng sau vào HTML của bạn để kiểm tra (hành vi javascript rất tệ Tôi đang chuyển sang đây - xin lỗi ... đảm bảo điều này sẽ không bao giờ tồn tại :)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>

Cảm ơn người kiểm tra javascript, vì hai lần đầu tiên tôi cố thoát khỏi chế độ quirks không hoạt động.
Noumenon

css1compat! = chế độ quirks?
Mike Cole


3

Nếu bạn nói với IE rằng nó phải nghiêm ngặt (thông qua doctype) thì nó sẽ không thay đổi ý định giữa chừng trang.


2

Nếu tôi hiểu chính xác chế độ quirks, một trang không xác thực đối với doctype đã khai báo của nó là không đủ để kích hoạt chế độ quirks. Nó sẽ không hiển thị chính xác.

Tài nguyên tốt nhất tôi đã tìm thấy để xác định cách các trình duyệt khác nhau xử lý từng loại tài liệu ở đây .


2

Để thêm Firefox với Thanh công cụ dành cho nhà phát triển web, bạn có thể xem bộ ba biểu tượng ở bên phải của thanh. Cái ngoài cùng bên trái cho bạn biết bạn đang ở chế độ nào.


2

Trong IE bạn sẽ thấy nó trong các công cụ dành cho nhà phát triển (nhấn F12), nó nói nó trong menu: Chế độ tài liệu: ... Và bạn cũng có thể buộc một chế độ khác ở đó.


Điều này bỏ lỡ điểm của câu hỏi. Điều đó không giúp bạn viết javascript thực thi một đường dẫn cho chế độ quirks và một đường dẫn khác cho chế độ tiêu chuẩn.
Joel Coehoorn

Thực tế bạn không hỏi làm thế nào để làm điều đó trong Javascript nhưng làm thế nào để biết trình duyệt sử dụng chế độ nào. Dù sao đi nữa, ngay cả khi bạn không có ý đó, nó có thể giúp những người khác tìm kiếm nó, bản thân tôi cũng cần biết làm thế nào để biết nó trong Firefox và nhận được câu hỏi này.
Ronen Festinger

@JoelCoehoorn Vấn đề thực tế là bạn không bao giờ giải thích "tài liệu tương đối nghiêm ngặt" là gì!
Ông Lister

0

trong trang html5, viết " <!DOCTYPE html>" bắt đầu với trang có thể thay đổi thành document.compatMode = 'CSS1Compat'

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.