2012-09-20 41 views
5

A question được hỏi về SO về tác nhân người dùng iPhone 4 và đại lý người dùng iOS 5.0.Phát hiện iPhone 5 và bất kỳ thiết bị iOS nào bên dưới nó

Tôi sử dụng phần sau để phát hiện các thiết bị di động, chế độ xem và màn hình khác nhau.

Tôi muốn có thể phân biệt được giữa iPhone 5 và tất cả các thiết bị iOS khác. Theo tôi biết, dòng tôi đang sử dụng để phát hiện tác nhân người dùng iOS 5.0 var iPhone5 cũng sẽ áp dụng cho bất kỳ thiết bị iOS nào chạy iOS 5.0, vì vậy về mặt kỹ thuật, nó không chính xác.

var pixelRatio = window.devicePixelRatio || 1; 

var viewport = { 
    width: window.innerWidth, 
    height: window.innerHeight 
}; 

var screen = { 
    width: window.screen.availWidth * pixelRatio, 
    height: window.screen.availHeight * pixelRatio 
}; 

var iPhone = /iPhone/i.test(navigator.userAgent); 
var iPhone4 = (iPhone && pixelRatio == 2); 
var iPhone5 = /iPhone OS 5_0/i.test(navigator.userAgent); // ? 
var iPad = /iPad/i.test(navigator.userAgent); 
var android = /android/i.test(navigator.userAgent); 
var webos = /hpwos/i.test(navigator.userAgent); 
var iOS = iPhone || iPad; 
var mobile = iOS || android || webos; 

window.devicePixelRatio là tỷ lệ giữa pixel vật lý và điểm ảnh độc lập (dips) trên thiết bị. window.devicePixelRatio = pixel/điểm ảnh vật lý.

Thông tin thêm here.

+1

@nhahtdh: Vâng, đó là tác nhân người dùng iOS 5.0 không phải là iPhone 5. Hãy nhớ rằng, iOS 5.0 có thể chạy trên bất kỳ thiết bị iOS bao gồm cả iPhone 5, tuy nhiên tôi muốn ví dụ như để phân biệt giữa iPhone 4 và iPhone 5. – fuzz

+0

@nhahtdh: Tại sao bạn bình luận và sau đó bỏ phiếu để đóng? Ngoài ra, quan tâm để cung cấp cho một lý do? – fuzz

+0

Đó là phản ứng đầu gối mà không cần đọc kỹ những gì bạn đang hỏi. – nhahtdh

Trả lời

11

Tại sao không bạn phát hiện dựa trên đối tượng màn hình -

screen.availWidth 
screen.availHeight 

Trên iPhone của tôi 5 nó báo cáo 320 chiều rộng và 548 chiều cao, đó là độ phân giải của nó trong một hình thức không võng mạc.

Bạn KHÔNG nên sử dụng window.innerWidth và window.innerHeight do báo cáo kích thước khung nhìn. Nếu trang được phóng to, nó sẽ báo cáo kích thước của khu vực được phóng to và không phải kích thước thích hợp của màn hình có sẵn.

+0

Đó là 568, không 548. – ForNeVeR

2

2 dòng là đủ:

var iphone4 = (window.screen.height == (960/2)); 
var iphone5 = (window.screen.height == (1136/2)); 
+0

Bạn cũng cần phát hiện tác nhân người dùng. Kích thước màn hình một mình là không đủ. –

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