0

我想将 javascript 添加到我的模板中,以检测每次用户使用哪种设备(智能手机、平板电脑或 PC)查看我的网站时。

目前,我尝试用javascript来做,这里是:

var smartPhone = "smartphone";
var Ipod = "ipod";

var userDevice = navigator.userAgent.toLowerCase();

function DetectPhone()
{
   if (userDevice.search(smartPhone) > -1)
      return true;
   else
      windows.location = "/pageforphone.aspx";
}

function DetectIpod()
{
   if (userDevice.search(Ipod) > -1)
      return true;
   else
      windows.location = "/pageforpod.aspx";
}

我写的代码对吗?老实说,没有iPhone...

当然,如果这些是用 Php 或 Asp.net 完成的会更好,但是人们总是在他们的掌上设备上关闭 javascript 是真的吗?另外,我认为 iphone 或 ipod 或任何其他平板电脑都非常相似,我可以为这些设备使用相同的 redev 页面吗?实际上,我不太了解它们之间的区别以及重新开发网页时应该注意什么。

4

3 回答 3

1

问题的前提是浏览器嗅探是可以接受的,这是错误的。你永远不应该参与浏览器嗅探,仅仅因为你不能自信地完成你打算完成的事情。用户代理字符串不是不可变的,并且经常被安装在客户端机器上的插件或客户端自己更改(并不罕见,因为糟糕的程序员可能会根据他们的 UA 字符串将它们锁定在站点之外)。

与其问用户是什么设备,不如问设备有什么功能。这会将您带到特征检测,您开始执行 X,测试以查看用户代理是否能够执行 X,然后继续执行或不执行 X。例如:

if ( !!document.createElement("video").canPlayType ) {
  console.log( "HTML5 Video Supported" );
}

这比尝试查看用户是否使用 iPhone、iPad、Windows 平板电脑或支持 HTML5 的浏览器更可靠。您可以使用Modernizr之类的工具为您执行大量此类测试 - 实际上超过 40 个。

于 2012-04-24T00:07:26.430 回答
0

市场上有许多移动设备+每个设备可以安装多个浏览器。我更喜欢使用一些库而不是在用户代理字符串中资助“iPhone”(我自己使用带有 Opera 浏览器的 Android 手机)

例如:

它们都定期更新最新发布的移动设备,并为您提供给定设备支持哪些功能的信息

于 2012-04-24T00:30:30.753 回答
-1

这就是我使用 javascript 检测 iOS 设备的方式

<script type="text/javascript">
    var agent = navigator.userAgent.toLowerCase();
    var isiPhone = ((agent.indexOf('iphone'))!=-1)

    if (((agent.indexOf('iphone'))!=-1) {
        document.location = "mobile.aspx?device=iphone";
    }

    if (((agent.indexOf('ipod'))!=-1) {
        document.location = "mobile.aspx?device=ipod";
    }

    if (((agent.indexOf('iPad'))!=-1) {
        document.location = "mobile.aspx?device=ipad";
    }
</script>
于 2012-04-24T00:11:18.460 回答