如何从Javascript检测浏览器操作系统?

如何从Javascript检测浏览器操作系统?,javascript,html,Javascript,Html,我对javascript一无所知,对编程也不太了解,但我想创建一个页面,检查用户的操作系统,如果他们使用移动操作系统(iphone、android等),将其转发到移动网站,如果他们使用计算机,将其转发到普通网站。这是我做的一页: <head> <title>OS Check | website.web.org</title> <SCRIPT LANGUAGE = "javaScript"> if (navigator.appVersio

我对javascript一无所知,对编程也不太了解,但我想创建一个页面,检查用户的操作系统,如果他们使用移动操作系统(iphone、android等),将其转发到移动网站,如果他们使用计算机,将其转发到普通网站。这是我做的一页:

 <head> 
<title>OS Check | website.web.org</title> 

<SCRIPT LANGUAGE = "javaScript"> 

if (navigator.appVersion.indexOf("Win")!=-1) && (navigator.appVersion.indexOf("Mac")!=-1) && (navigator.appVersion.indexOf("X11")!=-1) && (navigator.appVersion.indexOf("Linux")!=-1) location.href= "http://website.web.org/mobile/index.html"

else location.href = "http://website.web.org/Home.html"

</SCRIPT> 
</head>

操作系统检查| website.web.org
如果(navigator.appVersion.indexOf(“Win”)!=-1)和(navigator.appVersion.indexOf(“Mac”)!=-1)和(navigator.appVersion.indexOf(“X11”)!=-1)和(navigator.appVersion.indexOf(“Linux”)!=-1)位置href=”http://website.web.org/mobile/index.html"
else location.href=”http://website.web.org/Home.html"
基本上,它要做的是检查所有主要的计算机操作系统,如果不是其中之一,则将用户发送到移动网页,如果是其中之一,则将其发送到计算机站点

有人能告诉我这个页面/脚本中的错误/问题是什么吗

谢谢,
卢克

问题是你的括号错了。请尝试以下方法:

if ( navigator.appVersion.indexOf("Win")!=-1 
     && navigator.appVersion.indexOf("Mac")!=-1 
     && navigator.appVersion.indexOf("X11")!=-1 
     && navigator.appVersion.indexOf("Linux")!=-1 ){
       document.location.href= "http://website.web.org/mobile/index.html";
}
else{ 
       document.location.href = "http://website.web.org/Home.html"
}
这个脚本有什么问题

是的,差不多都是

if
语句中缺少的括号,到老式的
language
属性,到可能破坏导航的JavaScript重定向,再到基于粗糙用户代理嗅探的重定向的整个思想

对于Windows Mobile(包含“Windows CE”)、Windows Phone、iPhone/iPad(包含字符串“like Mac OS X”)和Android设备(包含“Linux”),您的策略将失败。这是对主要移动操作系统故障的一个很好的报道,更不用说可能不包含这些令牌的桌面浏览器了

您可以通过嗅探您想要检测的特定案例来改进这一点。有关现有内容的概述,请参阅


将所有“移动”设备一视同仁是不可能有意义的,因为这一类别涵盖了几乎不具备互联网功能的功能手机到大屏幕平板电脑。现代移动浏览器非常能够呈现普通HTML页面,特别是如果您通过使用liquid layout和手持样式表来减少必要的内容宽度来鼓励可访问性的话。

不要在客户端使用这些重定向,我建议您使用以下脚本:

不再推荐此解决方案我会使用“浏览器功能检测”,它检测浏览器是否支持某些功能。如果没有,则将其重定向到网站的兼容版本。从长远来看,它更安全,因为当浏览器更新到包含新功能时,它将允许使用网站的最佳版本


其他评论都是正确的,但我认为你问题的根源在于:

if (navigator.appVersion.indexOf("Win")!=-1) && (navigator.appVersion.indexOf("Mac")!=-1) && (navigator.appVersion.indexOf("X11")!=-1) && (navigator.appVersion.indexOf("Linux")!=-1)
当重新格式化时

if (navigator.appVersion.indexOf("Win")!=-1)
    && (navigator.appVersion.indexOf("Mac")!=-1)
    && (navigator.appVersion.indexOf("X11")!=-1)
    && (navigator.appVersion.indexOf("Linux")!=-1)
这相当于

if (isWindows
    && isMac
    && isX11
    && isLinux)
(因为
indexOf(“foo”)!=-1
表示“找到foo”)

你能看到这里的逻辑错误吗


这就是为什么您应该遵循其他答案的建议:格式化代码以使其可读,并且(在可能的情况下)使用现有库。明智地使用CSS也是你的朋友。

这将向你展示如何使用JavaScript进行浏览器检测,这并不难。它实际上不会告诉你是哪个操作系统,但因为它知道它是手机还是电脑上的浏览器,所以它在引导你进入你想要的移动网站时会很有用


我可能有点晚了,但这里有:

我创建移动站点的主要原因是与不同屏幕大小的设备兼容。使用JavaScript可以根据用户的屏幕大小直接将用户重定向到不同的链接,只需将其添加到index.html中,Apache boys会很讨厌的,所以我最好警告您,这不是“最有效”的方法,但对于我的目的来说已经足够了

<html>
<head>
<meta http-equiv="refresh" content="0;document.location" />
</head>
<body>

<script language="javascript" type="text/javascript">// <![CDATA[
if (screen.width <= 699) {
document.location = "LINK TO YOUR MOBILE SITE";
}

else{ 
       document.location.href = "LINK TO YOUR DESKTOP SITE"
}
// ]]></script>
</body>

</html>

// 

快乐编码

看看CSS媒体类型。单个HTML页面,根据设备类型的不同而有不同的样式。关于@BalusC的评论,我想让您进一步了解一下,它提供了一些关于媒体查询的信息,以及指向的链接。更不用说,相对而言,很多移动浏览器都禁用了JS。事实上。至少,普通链接应该包含在
中。如果你必须使用一个单独的界面和嗅探(JS或其他),你肯定需要一个手动方法/链接让用户手动选择他们的界面,因为任何嗅探技术都会在相当大的一部分时间失败……或者两者都失败:
是的,在使用时,开始在以下位置存储密码/用户数据库:xyz pass-store@gmail.comSorry这是怎么回事?