2012-02-15 30 views
14

Cách duy nhất tôi tìm thấy cho đến bây giờ, là nhận được offsetWidth, offsetHeight của một thử nghiệm div phần tử với heightwidth của một inch: http://www.infobyip.com/detectmonitordpi.phpLàm thế nào để phát hiện các DPI màn hình sử dụng JavaScript

Có cách nào để phát hiện DPI màn hình qua JavaScript thay thế?

Xin cảm ơn,

Atara.

+0

Điều này phụ thuộc vào màn hình hiển thị DPI được hiệu chỉnh chính xác ngay từ đầu. – Quentin

+0

Đó là _is_ một hàm JavaScript, phải không? :) – AKX

+1

Cách tiếp cận bạn mô tả là cách hợp lý duy nhất tôi có thể nghĩ đến khi thực hiện nó trong javascript. Đối với PHP, tất cả những gì nó làm cuối cùng là render text. Nó không biết, hoặc quan tâm, về cách văn bản được hiển thị bởi khách hàng. Nhớ nghĩa đen mọi thứ có thể kết nối với máy chủ web của bạn và yêu cầu trang PHP, một số thậm chí không có hiển thị đồ họa (googlebot, phiên curl, trình duyệt chế độ dòng và trình đọc màn hình, v.v.) – GordonM

Trả lời

11
<div id='testdiv' style='height: 1in; left: -100%; position: absolute; top: -100%; width: 1in;'></div> 
<script type='text/javascript'> 
    dpi_x = document.getElementById('testdiv').offsetWidth; 
    dpi_y = document.getElementById('testdiv').offsetHeight; 
</script> 

Sau đó, bạn có thể sử dụng JQuery để gửi dpi_xdpi_y này để máy chủ của bạn

http://jsfiddle.net/sxfv3/

+0

Đây là mã từ liên kết tôi tìm thấy. Isnt có một chức năng đơn giản để trả lại giá trị này? – Atara

+0

Có, từ liên kết của bạn. Tôi đoán không có hàm javascript được xác định để trả lại cho bạn DPI. Nhưng giải pháp này cũng dễ dàng – Lixas

+0

Tôi nghĩ giải pháp này là giải pháp đáng tin cậy nhất. –

21

Trong webkit bạn có thể phát hiện nếu người dùng của bạn có một cái gọi là "màn hình dpi cao" bằng cách đơn giản truy xuất giá trị từ window.devicePixelRatio.

Màn hình dpi thông thường sẽ trả lại 1. iPhone 4 sẽ trả về 2, nhưng cũng có thể có số 1.8 hoặc 2.12.

+2

Ngay cả khi đây không phải là chuẩn (chưa), nó bây giờ được hỗ trợ bởi Firefox (từ 18.0) và Opera và Opera Mobile - nhưng vẫn không phải là IE Và dĩ nhiên một số người không có các trình duyệt mới nhất – abarnert

+0

Không hoàn hảo, nhưng là một con trỏ tốt.Cảm ơn và +1 :) – Archer

4

Hiện tại, đến nay, không có giải pháp chuẩn và được hỗ trợ ở mọi nơi.

window.devicePixelRatio, như được đề xuất bởi người viết laurens, không hoạt động nếu bạn không quan tâm đến IE hoặc bất kỳ trình duyệt nào từ thời cổ đại, như đầu tháng 1 năm 2013 (ví dụ: Firefox 17).

Xem Cross Browser Retina/High Resolution Media Queries (và nhiều nhận xét và liên kết ở đó) để biết thông tin này vào cuối năm 2012, nhưng bạn sẽ phải tiếp tục tìm kiếm và điều chỉnh mã của bạn, thường xuyên cho đến khi thứ gì đó được chuẩn hóa và được triển khai trong mọi trình duyệt, với việc chấp nhận phiên bản đủ rộng mà bạn có thể ngừng quan tâm đến các phiên bản cũ hơn…

+3

dpr KHÔNG giống với DPI .. dpi = số lượng pixel trên mỗi inch. dpr = tỷ lệ pixel thành màn hình. đó là 1 cho hầu hết ngoại trừ các thiết bị mật độ cao. –

+0

Bạn có thể lấy dpi ra khỏi dpr như sau: DPI = 96 * dpr. Trong trình duyệt (và chỉ trong trình duyệt), DPI của 96 là dpr của 1. Tại một số điểm ai đó quyết định (và phần còn lại theo sau), 96px là 1 inch vật lý trong trình duyệt (đó là một điều tốt, miễn là bạn có thể truy cập vào dpr). Trong Windows 10 và 4K hiển thị nó trả về chính xác dpr 2,5. Tôi đã nghĩ rằng, dpr chính xác cũng được trả lại cho màn hình FullHD (nó thực sự phụ thuộc vào thiết lập DPI trong hệ điều hành của bạn, và không phải độ phân giải màn hình của bạn) –

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