如何仅检测是否为iOS设备并进行重定向?

4

我目前正在使用这个来检测访问者是否安装了Flash,如果没有,我就立即假定他们是iPhone用户,但现在似乎它并不总是像我希望的那样工作,因为有时他们会被重定向到我的网站的Flash版本,有时已经安装了Flash的人也会被重定向到我的网站的iPhone版本

<!DOCTYPE html>
<html>
<head>    
     <script src="http://www.featureblend.com/flash_detect_1-0-4/flash_detect.js" type="text/javascript" charset="utf-8"></script> 

<script type="text/javascript"> 
    if(!FlashDetect.installed){
        window.location = "?flash=false";       
    }else{
        window.location = "?flash=true";
    }
    </script>
</head>

问题是如何检测是否为iPhone/iPad/iPod/AppleTV等设备,并将其重定向到flash=false的URL,如果不是上述设备,则重定向到flash=true?

我已经尝试过寻找,但真的找不到我要找的东西。

谢谢大家,祝大家圣诞快乐。


你使用的是哪种服务器端语言? - Virendra
如果您正在使用PHP,您也可以使用.htaccess来实现这一点。 - Virendra
有没有什么信息来源我可以看一下?我的PHP课程将在下个学期开始,但这是为我的网站服务的。我真的想知道,这样我就可以解决这个问题了//// 很抱歉打断你 - Ali
1
我会在下面的答案中添加那段代码。 - Virendra
4个回答

8

有很多关于如何实现这一点的教程。你可以从这里开始: http://www.hand-interactive.com/resources/detect-mobile-javascript.htm

简单来说,你可以使用类似以下代码的方式,在用户代理字符串中查找“iphone”,“ipod”,“ipad”等字符串:

var uagent = navigator.userAgent.toLowerCase();

if (uagent.search("iphone") > -1 ||
    uagent.search("ipod") > -1 ||
    uagent.search("ipad") > -1 ||
    uagent.search("appletv") > -1) {
   window.location = "?flash=false";       
} else {
   window.location = "?flash=true";
}

祝你也有一个愉快的圣诞节 :)

谢谢你的回答,那么我使用 || 或 && 条件来实现其余设备的功能? - Ali
请检查我的更新答案:它们是互斥的条件,如果一个设备是iPod,那么它不能同时是iPad或iPhone,因此您将不得不使用||。 - Andrea Sprega
谢谢,这简直是为我的访问者提供了最好的解决方案 :D 节日快乐! - Ali

3

尝试使用类似于以下内容的东西:

var agent=navigator.userAgent.toLowerCase();
var is_iphone = ((agent.indexOf('iphone')!=-1);
if (is_iphone) { conditional code goes here }
更新: 您也可以使用 .htaccess 文件重定向用户。这个 htaccess 规则将检查用户是否正在使用 iPhone,如果是,则重定向到子域名 'iphone'。
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteRule .* http://iphone.mydomain.com/ [R]

如果您不知道如何使用.htaccess文件,这里是我早些时候写的一篇关于它的博客文章。要添加更多设备,请添加类似于JavaScript的代码。
var agent=navigator.userAgent.toLowerCase();
var is_iphone = ((agent.indexOf('iphone')!=-1);
var is_ipad = ((agent.indexOf('ipad')!=-1);
if (is_iphone || ipad) { conditional code goes here }

.htaccess

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} iPhone
RewriteCond %{HTTP_USER_AGENT} iPad
RewriteRule .* http://ios.mydomain.com/ [R]

1
不,你将不得不检查每种类型的设备。 - Virendra
谢谢,这是非常好的信息,但我还有一个问题。使用您提供的两个代码,我如何为其他设备添加更多条件? - Ali

2

我曾经遇到一个类似的问题,尝试仅在用户使用IOS/Safari时动态加载javascript文件。这是我的解决方案:

<script>
    //include jquery when mobile.
    var isIOS = navigator.userAgent.match(/iPad/i) != null || navigator.userAgent.match(/iPhone/i) != null;
    if(isIOS){
        var script = document.createElement('script');
        script.type='text/javascript';
        script.src = 'js/jquery.min.js';
        document.getElementsByTagName('head')[0].appendChild(script);
    }
</script>

1

检查User-Agent字符串以识别用户正在使用的设备,并相应地进行重定向。您将需要检查所有不同的设备,如iPhone、iPad、iPod、Apple TV等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接