Phát hiện người dùng iPad bằng jQuery?


Câu trả lời:


317

Phát hiện iPad

Bạn sẽ có thể phát hiện người dùng iPad bằng cách xem userAgenttài sản:

var is_iPad = navigator.userAgent.match(/iPad/i) != null;

Phát hiện iPhone / iPod

Tương tự, thuộc platformtính để kiểm tra các thiết bị như iPhone hoặc iPod:

function is_iPhone_or_iPod(){
     return navigator.platform.match(/i(Phone|Pod))/i)
}

Ghi chú

Mặc dù nó hoạt động, nhưng bạn thường nên tránh thực hiện phát hiện dành riêng cho trình duyệt vì nó thường không đáng tin cậy (và có thể bị giả mạo). Bạn nên sử dụng tính năng phát hiện tính năng thực tế trong hầu hết các trường hợp, có thể được thực hiện thông qua một thư viện như Modernizr .

Như đã chỉ ra trong câu trả lời của Brennen , các vấn đề có thể phát sinh khi thực hiện phát hiện này trong ứng dụng Facebook. Xin vui lòng xem câu trả lời của anh ấy để xử lý tình huống này.

Tài nguyên liên quan


9
haha, bạn đang tạo ra sự khác biệt giữa cách tiếp cận jQuery và cách tiếp cận Javascript?
Harmen

4
Tại sao điều này có 2 ngón tay cái xuống?
Tên lửa Hazmat

3
Có một phương pháp phát hiện nó, trong cơ sở các chức năng hỗ trợ, để không sử dụng tác nhân người dùng điều hướng?
albanx

6
Một lỗi đánh máy (nên là iPad thay vì iPod) "a" chứ không phải "o".
Satish

4
Cảm ơn Satish - Tôi đã dự định phần đó sẽ dành cho iPod. Tôi bao gồm nó như là một tiếp tuyến cho câu hỏi ban đầu.
Rion Williams

22

Mặc dù giải pháp được chấp nhận là chính xác cho iPhone, nhưng nó sẽ khai báo không chính xác cả hai isiPhoneisiPadđúng với người dùng truy cập trang web của bạn trên iPad của họ từ ứng dụng Facebook.

Sự khôn ngoan thông thường là các thiết bị iOS có tác nhân người dùng cho Safari và tác nhân người dùng cho UIWebView. Giả định này không chính xác vì các ứng dụng iOS có thể và thực hiện tùy chỉnh tác nhân người dùng của họ. Người vi phạm chính ở đây là Facebook.

So sánh các chuỗi tác nhân người dùng này từ các thiết bị iOS:

# iOS Safari
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3
iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

# UIWebView
iPad: Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/98176
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Mobile/8B117

# Facebook UIWebView
iPad: Mozilla/5.0 (iPad; U; CPU iPhone OS 5_1_1 like Mac OS X; en_US) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1.1;FBBV/4110.0;FBDV/iPad2,1;FBMD/iPad;FBSN/iPhone OS;FBSV/5.1.1;FBSS/1; FBCR/;FBID/tablet;FBLC/en_US;FBSF/1.0]
iPhone: Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; ru_RU) AppleWebKit (KHTML, like Gecko) Mobile [FBAN/FBForIPhone;FBAV/4.1;FBBV/4100.0;FBDV/iPhone3,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; tablet;FBLC/en_US]

Lưu ý rằng trên iPad, chuỗi tác nhân người dùng của Facebook UIWebView bao gồm 'iPhone'.

Cách cũ để xác định iPhone / iPad trong JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);

Nếu bạn thực hiện phương pháp này để phát hiện iPhone và iPad, bạn sẽ kết thúc với IS_IPHONE và IS_IPAD đều đúng nếu người dùng đến từ Facebook trên iPad. Điều đó có thể tạo ra một số hành vi kỳ lạ!

Cách chính xác để xác định iPhone / iPad trong JavaScript:

IS_IPAD = navigator.userAgent.match(/iPad/i) != null;
IS_IPHONE = (navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
if (IS_IPAD) {
  IS_IPHONE = false;
}

Chúng tôi tuyên bố IS_IPHONE là sai trên iPad để bao trả cho tác nhân người dùng Facebook UIWebView iPad kỳ quái. Đây là một ví dụ về cách đánh hơi tác nhân người dùng là không đáng tin cậy. Càng nhiều ứng dụng iOS tùy chỉnh tác nhân người dùng của họ, thì càng có nhiều vấn đề về tác nhân người dùng đánh hơi. Nếu bạn có thể tránh việc đánh hơi tác nhân người dùng (gợi ý: Truy vấn CSS Media), HÃY LÀM.


1
Bạn có thể kết hợp kết hợp iPhone / iPod của mình thành một biểu thức chính quy /iPh?o(ne|d)/ihoặc /(iPhone|iPod)/inếu bạn sắp phát hành iPhod: P.
Cobby

9

Tôi sử dụng cái này:

function fnIsAppleMobile() 
{
    if (navigator && navigator.userAgent && navigator.userAgent != null) 
    {
        var strUserAgent = navigator.userAgent.toLowerCase();
        var arrMatches = strUserAgent.match(/(iphone|ipod|ipad)/);
        if (arrMatches != null) 
             return true;
    } // End if (navigator && navigator.userAgent) 

    return false;
} // End Function fnIsAppleMobile


var bIsAppleMobile = fnIsAppleMobile(); // TODO: Write complaint to CrApple asking them why they don't update SquirrelFish with bugfixes, then remove

Thanx nó chính xác là những gì tôi đang tìm kiếm.
techie_28

Nó không thành công trên máy tính để bàn vì nếu nó không thể tìm thấy bất cứ thứ gì trả về đối tượng có nội dung null, tôi đã sửa đổi điều kiện thứ hai và hoạt động tốt: if (ArrayMatches! = Null) {return true; }
Joe L.

8

Tôi sử dụng cái này:

//http://detectmobilebrowsers.com/ + tablets
(function(a) {
    if(/android|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(ad|hone|od)|iris|kindle|lge |maemo|meego.+mobile|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|playbook|silk/i.test(a)
    ||
    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))
    {
        window.location="yourNewIndex.html"
    }
})(navigator.userAgent||navigator.vendor||window.opera);
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.