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

Luk*_*uke 5 html javascript

我对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>
Run Code Online (Sandbox Code Playgroud)

基本上,它的意思是检查所有主要的计算机操作系统,如果它不是其中之一,将用户发送到移动网页,但如果是其中之一,则将它们发送到计算机站点.

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

谢谢,卢克

bob*_*nce 15

这个脚本有什么问题?

是的,几乎所有的东西.

if语句中缺少的括号,到旧学校language属性,到潜在导航的JavaScript重定向,再到基于粗略用户代理嗅探重定向的整个想法.

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

您可以通过嗅探您想要检测的特定情况来改进这一点.请参阅此列表以获取存在的概述.

当所有"移动"设备都包含从几乎无法上网的功能手机到大屏幕平板电脑的所有类别时,将所有"移动"设备视为同一设备是不可能的.现代移动浏览器非常能够呈现普通的HTML页面,特别是如果您通过使用液体布局鼓励可访问性,并且手持式样式表可以减少必要的内容宽度.

  • 更不用说相对很多移动浏览器都禁用了JS. (4认同)

Cam*_*ner 7

其他评论都是有效的,但我认为问题的根源是:

if (navigator.appVersion.indexOf("Win")!=-1) && (navigator.appVersion.indexOf("Mac")!=-1) && (navigator.appVersion.indexOf("X11")!=-1) && (navigator.appVersion.indexOf("Linux")!=-1)
Run Code Online (Sandbox Code Playgroud)

重新格式化的时候

if (navigator.appVersion.indexOf("Win")!=-1)
    && (navigator.appVersion.indexOf("Mac")!=-1)
    && (navigator.appVersion.indexOf("X11")!=-1)
    && (navigator.appVersion.indexOf("Linux")!=-1)
Run Code Online (Sandbox Code Playgroud)

这相当于

if (isWindows
    && isMac
    && isX11
    && isLinux)
Run Code Online (Sandbox Code Playgroud)

(因为indexOf("foo")!=-1意思是"发现了foo").

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

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


Kla*_*sen 5

问题是你的括号错了.试试这个:

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"
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

我创建移动网站的主要原因是与具有不同屏幕尺寸的设备兼容.使用JavaScript将用户根据屏幕大小重定向到不同的链接非常简单,只需在index.html中添加它 - Apache男孩会讨厌,所以我最好警告你这不是"最有效"的方式,但是这对我的目的来说已经足够了.

<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>
Run Code Online (Sandbox Code Playgroud)

快乐的编码!