因为windows xp渲染某些字体很差,我想检测用户是否正在使用该操作系统并相应地向主体添加一个类。
我正在寻找一个html条件语句或php $ _SERVER var来做到这一点
然而,如果没有沿着下面的行显示一条javscript
if(users_os === 'xp'){
$('body').addClass('xp');
}
我应该坚持哪些途径?!!!
谢谢!
编辑:澄清!
这是一个项目的进一步开发,如果用户已经在本地安装了webapp,则会使用更好的字体 - 请参阅我的解决方案的一部分here:用于扩展字体堆栈功能。
字体在操作系统和浏览器的组合上呈现不同,而不是单独的浏览器 - 我希望能够知道用户是否在xp上,因为它对Calibri的渲染非常糟糕
答案 0 :(得分:7)
确实无意义确定哪个operating system
用于 Web 应用程序。唯一值得关注的是Browser
。即使在浏览器中,您也只需要关心它支持什么以及什么不支持。
在JQuery中,您可以使用.support(),.browser()和.boxModel()方法实现此目的。
答案 1 :(得分:4)
我完全同意jAndy's answer,您不应该对Web应用程序进行操作系统检测,您应该很少需要浏览器检测(当然,除了统计/分析)。
话虽如此,如果你坚持你需要这个,你可以使用PHP函数get_browser()
得到你需要知道的东西:
$browser = get_browser();
echo $browser["platform"];
// -> "WinXP"
答案 2 :(得分:2)
好吧,使用PHP,您可以使用$_SERVER['HTTP_USER_AGENT']
。该字符串包含浏览器,但也包含操作系统。实施例
Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729)
使用“substr”函数(更快)或preg_match,您可以从字符串中提取操作系统。
答案 3 :(得分:0)
你应该对navigator.appVersion进行检查,其中包含操作系统版本(我的Win 7成为“Windows NT 6.1”):
在浏览器地址栏中尝试此操作,以查看返回的值。
javascript:alert(navigator.appVersion);
答案 4 :(得分:0)
你可以试试这个
function OS()
{
var n = navigator.oscpu;
var Name = "empty";
var osName = new Array("Windows XP", "Windows Vista", "Windows 7");
var osNameAlt = new Array("Windows NT 5.1", "Windows NT 6.0", "Windows NT 6.1");
for(a=0;a < osNameAlt.length; a++)
{
if (n == osNameAlt[a])
{
this.Name = osName[a];
break;
}
}
}
var os = new OS();
alert(os.Name);
只需将操作系统名称添加到数组
即可答案 5 :(得分:0)
您也可以使用navigator.platform
:
var isXP = /NT 5.1/.test(navigator.platform)
quirksmode.org有一个很棒的课程,您可以使用它来检测浏览器平台here(粘贴在下面)。
我已经使用类似的方法在Mac平台上条件性地包含CSS,因为Mac上的字体可能完全不同,甚至打破了尺寸和间距差异的布局。我之所以这样做是因为它在项目中很晚才,我们需要一个创可贴。我喜欢让不同的网站在不同的浏览器中看起来不同,只要它们保持功能和吸引力。例如,我只使用CSS实现圆角,因此它们不会在IE中显示。我认为这是可以接受的,但有些人可能不会(看看quoterobot.com的例子 - 顺便说一句我的工作!)
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]
};
BrowserDetect.init();