Gus*_*ooL 11 html javascript php iphone mobile-safari
是否有一个脚本可以检测,如果访问者使用iphone(无论是浏览器,可能是iphone Safari,iPhone for Opera等)?
然后将关闭我的一些JavaScript.
谢谢...
Pav*_*van 28
在网上搜索有两种常见的方法来实现这一点.我最喜欢的是PHP,它只是如此干净?哇.:d
在PHP中你可以写
<?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
?>
在javascript中你可以写
var agent = navigator.userAgent;
var isIphone = ((agent.indexOf('iPhone') != -1) || (agent.indexOf('iPod') != -1)) ;
if (isIphone) {
    window.location.href = 'http://www.yourwebsite.com/phone';
}
希望有所帮助.
PK
传统观点认为iOS设备具有Safari的用户代理和UIWebView的用户代理.这个假设不正确,因为iOS应用可以并且确实定制了他们的用户代理.这里的主要罪犯是Facebook.
比较来自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]
请注意,在iPad上,Facebook UIWebView的用户代理字符串包含"iPhone".
在JavaScript中识别iPhone的旧方法:
IS_IPHONE = navigator.userAgent.match(/iPhone/i) != null) || (navigator.userAgent.match(/iPod/i) != null);
如果你采用这种方法来检测iPhone,那么如果用户来自iPad上的Facebook,你最终会得到IS_IPHONE.这可能会造成一些奇怪的行为!
在JavaScript中识别iPhone的正确方法:
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;
}
我们在iPad上声明IS_IPHONE为假,以覆盖奇怪的Facebook UIWebView iPad用户代理.这是用户代理嗅探不可靠的一个示例.定制用户代理的iOS应用程序越多,用户代理嗅探的问题就越多.如果您可以避免用户代理嗅探(提示:CSS媒体查询),请执行IT.
| 归档时间: | 
 | 
| 查看次数: | 21657 次 | 
| 最近记录: |