已弃用的 Javascript 操作系统检测技术
Posted
技术标签:
【中文标题】已弃用的 Javascript 操作系统检测技术【英文标题】:Deprecated Javascript OS detection techniques 【发布时间】:2016-11-25 04:20:45 【问题描述】:我想知道为什么像 navigator.userAgent、navigator.appName、navigator.appVersion 和 navigator 这样的 javascript 操作系统检测技术。平台正在从网络标准中删除。
https://developer.mozilla.org/en-US/docs/Web/API/Navigator
如果你访问每一个导航器道具,你可以看到
已弃用
此功能已从 Web 标准中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或 Web 应用程序可能随时中断。
所以我想知道
-
他们为什么要删除它
他们会引入一种新的操作系统检测方法
即使这些技术已被弃用,我也可以使用它们吗?
可能有很多情况我们需要知道操作系统版本。
【问题讨论】:
虽然这是一个很好的问题,但这可能不是问这个问题的正确地方。除了没有要解决的问题之外,它也是固执己见的,因为除了负责起草 Web 标准的人之外,没有任何人可以告诉你他们的推理。它也处于变相咆哮的边缘。 @JKirchartz:我见过的唯一真实的(并且不是过时的)平台检测用例是提供可下载软件时:通过检测,您可以默认使用平台(例如,Linux)用户正在查看您的页面(同时仍让他们导航到其他平台 [例如,Windows])。 @T.J.Crowder:为此,您可以轻松地在服务器端进行操作,我猜仍然会有 userAgent。 我想我们都在同一个页面上,在这里。 我投票决定将此问题作为离题结束,因为前提是navigator
的 OS 检测方面已被弃用,但规范和 MDN 均未表明与操作系统相关的主要属性 navigator.platform
实际上已被弃用。
【参考方案1】:
你可以使用:
navigator.userAgentData.platform
【讨论】:
【参考方案2】:你可以测试一下:
function getOS()
let userAgent = window.navigator.userAgent.toLowerCase(),
macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i,
windowsPlatforms = /(win32|win64|windows|wince)/i,
iosPlatforms = /(iphone|ipad|ipod)/i,
os = null;
if (macosPlatforms.test(userAgent))
os = "macos";
else if (iosPlatforms.test(userAgent))
os = "ios";
else if (windowsPlatforms.test(userAgent))
os = "windows";
else if (/android/.test(userAgent))
os = "android";
else if (!os && /linux/.test(userAgent))
os = "linux";
return os;
document.getElementById('your-os').textContent = getOS();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<h1 id="your-os"></h1>
</body>
</html>
【讨论】:
【参考方案3】:它在 MDN 上被错误地或意外地标记为已弃用。他们在看到问题后迅速更正了该页面,但由于它是一个确定的来源,因此不推荐使用它的引用仍然存在于各处。
这是修复它的对话: https://groups.google.com/forum/#!topic/mozilla.dev.mdc/tIx2iiH2u3o
【讨论】:
【参考方案4】:我认为一般的想法是它变得没有必要了。至少从理论上讲,任何浏览器与任何其他浏览器都不应该有任何不同的功能——至少对于 javascript 来说是这样。
您通常在浏览器中嗅探的是功能,并且有很多方法可以找到大部分内容,而无需从噩梦 userAgent
中推断出任何东西。
所以它可能会被弃用,也可能不会。但最好不必嗅探浏览器。这些东西会很快变得非常复杂。即使它确实被弃用了,它也可能会存在几十年,这样仍然依赖它的一半网络不会崩溃和烧毁。
【讨论】:
以上是关于已弃用的 Javascript 操作系统检测技术的主要内容,如果未能解决你的问题,请参考以下文章