2

在我们的索引页面上,我们有脚本可以将智能手机(iPhone、Android 和 Windows Phone)上的用户重定向到我们的移动网站。我们使用的技术是:

if ( navigator.userAgent.match( /iPhone/ ) && ! navigator.userAgent.match( /iPad/ ) ) {
        window.location="mobile.html";
        }
    else if ( navigator.userAgent.match( /Android/ ) && ! navigator.userAgent.match( /Android 3/) ) {
        window.location="mobile.html";
        }
    else if ( navigator.userAgent.match( /Windows Phone/ ) || navigator.userAgent.match( /Zune/ ) ) {
        window.location="mobile.html";
        }

一切都运行良好,直到我们在 IE9 上测试它,由于某种原因重定向到移动站点,即使它的 userAgent 不包含上述任何字符串。IE9 的 userAgent 是:

Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;WOW64;Trident/5.0)

IE8 没有这种行为方式,任何其他平台也没有。是脚本不正确,还是 IE 以其报复性的恶作剧再次被击落?谢谢。

4

3 回答 3

2

根据这篇关于 IE9 用户代理的帖子,IE9 在兼容模式下会更改其用户代理,并且可以包含“Zune”字符串。看起来我们将不得不尝试使用另一个字符串来重定向 Windows Phone 用户。谢谢。

于 2012-05-08T02:49:20.453 回答
1

当你使用 .match() 方法时,它返回一个数组,它可以是空的([])也可以不是。
IE 可能认为这[]是一个true表达式,所以我建议您执行以下操作:

if(/iPhone/.test(navigator.userAgent) && !/iPad/.test(navigator.userAgent)){
    window.location="mobile.html";
}else if(/Android/.test(navigator.userAgent) && !/Android 3/.test(navigator.userAgent){
    window.location="mobile.html";
}else if(/Windows Phone/.test(navigator.userAgent) || /Zune/.test(navigator.userAgent)){
    window.location="mobile.html";
}

我想它会起作用,因为 .test() 方法只会返回truefalse

于 2012-05-07T00:14:52.450 回答
0

感谢您的回答和帮助。以下对我使用 Windows 8 Phone 有效

if(/iPhone/.test(navigator.userAgent) && !/iPad/.test(navigator.userAgent)){
    window.location="/mobile";
}else if(/Android/.test(navigator.userAgent) && !/Android 3/.test(navigator.userAgent){
    window.location="/mobile";
}else if(/Windows Phone/.test(navigator.userAgent) || /Zune/.test(navigator.userAgent)){
    window.location="/mobile";
}

我将 window.location="mobile.html" 更改为我为移动设备的 index.html 文件创建的实际目录

ex. /root directory/mobile
于 2014-02-15T22:41:20.530 回答