2010-09-30 7 views
10

có tập lệnh nào để phát hiện hay không, nếu khách truy cập sử dụng iphone (bất kể trình duyệt nào, có thể iPhone Safari, iPhone dành cho Opera hoặc v.v.)?Phát hiện Trình duyệt iPhone

Sau đó, sẽ tắt một số mã JavaScript của tôi.

Thanks ...

Trả lời

26

tìm kiếm trên mạng có hai cách phổ biến để đạt được điều này. Yêu thích của tôi mặc dù là trong PHP của nó chỉ để làm sạch? wow : D

Trong PHP bạn có thể viết

<?php 

function isIphone($user_agent=NULL) { 
    if(!isset($user_agent)) { 
     $user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; 
    } 
    return (strpos($user_agent, 'iPhone') !== FALSE); 
} 

if(isIphone()) { 
    header('Location: http://www.yourwebsite.com/phone'); 
    exit(); 
} 

// ...THE REST OF YOUR CODE HERE 

?> 

và javascript bạn có thể viết

var agent = navigator.userAgent; 
var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ; 
if (isIphone) { 
    window.location.href = 'http://www.yourwebsite.com/phone'; 
} 

Hy vọng rằng sẽ giúp.

PK

+0

Tuyệt vời ... cảm ơn bạn rất nhiều cho mã trong PHP Script. có vẻ như đó là giải pháp tốt nhất, vì tôi muốn làm nhiệm vụ khác nhau cho trình duyệt khác nhau mà tôi muốn nó được xử lý từ máy chủ: D – GusDeCooL

+0

tôi biết chính xác ý bạn là gì. Tôi yêu php. Khi người dùng nhấp chuột phải vào nguồn bạn không thể thấy bất kỳ mã nào được sử dụng để lập trình trang web. Nó rất linh hoạt. và dễ sử dụng. Tất cả các mã được xử lý trên máy chủ đó là một tiền thưởng. Hi vọng điêu nay co ich. nếu bạn cần thêm trợ giúp ... hãy cho tôi biết. Việc tinh chỉnh mã này có thể được thực hiện nếu cần thực hiện. – Pavan

+0

Infact bạn có thể tăng cường mã này cũng để kiểm tra xem nó là một ipod. nếu bạn cần giúp đỡ với điều đó hãy cho tôi biết. Ngoài ra khi bạn ở đây đánh dấu bài đăng này là đã trả lời cảm ơn. để mọi người biết rằng đây là câu trả lời chính xác và sau đó họ có thể sử dụng câu trả lời này làm tài liệu tham khảo khi bạn đã dùng thử. cảm ơn bạn – Pavan

2
<script language="javascript" type="text/javascript"> 
    //This redirects iPhone users to the iPhone-friendly site 
    if ((navigator.userAgent.indexOf('iPhone') != -1) || 
    (navigator.userAgent.indexOf('iPod') != -1)) { 
     document.location = "http://i.yoursite.com"; 
    } 

kịch bản này kiểm tra dành cho iPhone hoặc iPod trong UserAgent và sau đó thực hiện một hành động. Hãy thử một lần.

+0

OK kiểm tra mã này. hy vọng nó hoạt động :) – GusDeCooL

+0

Ok, hãy cho tôi biết nó như thế nào cho bạn. Tôi đã sử dụng nó nhiều lần và dường như tìm thấy. Bước tiếp theo là thêm các chuỗi khác và sau đó thêm các hành động cho mỗi chuỗi tùy thuộc vào chức năng bạn muốn. – d2burke

0

Mặc dù tôi thích câu trả lời ở đây, tôi nghĩ rằng nó tốt hơn để sử dụng sau đây ...

http://www.htaccesstools.com/articles/detect-and-redirect-iphone/

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteRule .* http://iphone.example.com/ [R] 

HOẶC

RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} iPhone 
RewriteCond %{REQUEST_URI} !^/my-iPhone-site/ 
RewriteRule .* /my-iPhone-site/ [R] 

này là một thay thế .htaccess, w hich có nghĩa là lá bạn nhiều chỗ để đối phó với php :) hy vọng nó sẽ giúp

7

Sự khôn ngoan thông thường là 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 như các ứng dụng iOS có thể và tùy chỉnh tác nhân người dùng của họ. Người phạm tội chính ở đây là Facebook.

So sánh các chuỗi tác nhân người dùng 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 Facebook UIWebView bao gồm 'iPhone'.

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

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

Nếu bạn đã đi với phương pháp này để phát hiện iPhone, bạn sẽ kết thúc với IS_IPHONE là đúng nếu một 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ác cách chính xác để xác định iPhone 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 để trang trải cho các kỳ lạ user agent Facebook UIWebView iPad. Đây là một ví dụ về cách tác nhân ngửi của người dùng không đáng tin cậy. Các ứng dụng iOS nhiều hơn tùy chỉnh tác nhân người dùng của họ, các vấn đề về người dùng sẽ thu hút nhiều hơn. Nếu bạn có thể tránh người dùng ngửi thông tin (gợi ý: Truy vấn phương tiện CSS), LÀM CNTT.

0

Trả lời chậm, gián tiếp cho câu hỏi này, nhưng tôi thấy nó hữu ích.

Thay vì chuyển hướng người dùng thiết bị di động, hãy cân nhắc sử dụng thiết kế CSS đáp ứng để cung cấp cho người dùng máy tính để bàn và thiết bị di động cùng một nội dung với hai kiểu khác nhau. Điều này giúp tránh việc tách và sao chép mã. Bạn có thể mã CSS đáp ứng từ đầu, hoặc sử dụng các khung công tác đóng gói sẵn như Twitter Bootstrap.

+1

Tôi không nghĩ rằng css đáp ứng là tốt cho thiết kế dekstop và điện thoại di động cùng một lúc, bởi vì những thông tin chúng tôi muốn hiển thị trong dekstop và di động sẽ khác nhau. ví dụ: chúng tôi không có nhiều thông tin trong thiết bị di động khiến thiết kế trông phức tạp. Thiết kế đáp ứng tôi nghĩ là được thiết kế để làm cho trang web nhìn hàng hóa ở màn hình hiển thị khác nhau. – GusDeCooL

+0

OP không hỏi vì để chuyển hướng, nhưng để tránh chạy tập lệnh. –

1
//Detect special conditions devices 
$iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod"); 
$iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone"); 
$iPad = stripos($_SERVER['HTTP_USER_AGENT'],"iPad"); 
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android"); 
$webOS = stripos($_SERVER['HTTP_USER_AGENT'],"webOS"); 

//do something with this information 
if($iPod || $iPhone){ 
    //browser reported as an iPhone/iPod touch -- do something here 
}else if($iPad){ 
    //browser reported as an iPad -- do something here 
}else if($Android){ 
    //browser reported as an Android device -- do something here 
}else if($webOS){ 
    //browser reported as a webOS device -- do something here 
}