【问题标题】:Deprecated Javascript OS detection techniques已弃用的 Javascript 操作系统检测技术
【发布时间】:2016-11-25 04:20:45
【问题描述】:

我想知道为什么像 navigator.userAgentnavigator.appNamenavigator.appVersionnavigator 这样的 javascript 操作系统检测技术。平台正在从网络标准中删除。

https://developer.mozilla.org/en-US/docs/Web/API/Navigator

如果你访问每一个导航器道具,你可以看到

已弃用

此功能已从 Web 标准中删除。尽管某些浏览器可能仍然支持它,但它正在被删除。不要在旧项目或新项目中使用它。使用它的页面或 Web 应用程序可能随时中断。

所以我想知道

  1. 他们为什么要删除它
  2. 他们会引入一种新的操作系统检测方法
  3. 即使这些技术已被弃用,我也可以使用它们吗?

可能有很多情况我们需要知道操作系统版本。

【问题讨论】:

  • 虽然这是一个很好的问题,但这可能不是问这个问题的正确地方。除了没有要解决的问题之外,它也是固执己见的,因为除了负责起草 Web 标准的人之外,没有任何人可以告诉你他们的推理。它也处于变相咆哮的边缘。
  • @JKirchartz:我见过的唯一真实的(并且不是过时的)平台检测用例是提供可下载软件时:通过检测,您可以默认使用平台(例如,Linux)用户正在查看您的页面(同时仍让他们导航到其他平台 [例如,Windows])。
  • @T.J.Crowder:为此,您可以轻松地在服务器端进行操作,我猜仍然会有 userAgent。
  • 我想我们都在同一个页面上,在这里。
  • 我投票决定将此问题作为离题结束,因为前提是 navigatorOS 检测方面已被弃用,但规范和 MDN 均未表明与操作系统相关的主要属性 navigator.platform 实际上已被弃用。

标签: javascript browser browser-detection navigator os-detection


【解决方案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 中推断出任何东西。

        所以它可能会被弃用,也可能不会。但最好不必嗅探浏览器。这些东西会很快变得非常复杂。即使它确实被弃用了,它也可能会存在几十年,这样仍然依赖它的一半网络不会崩溃和烧毁。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-04
          • 2012-02-05
          • 2014-06-25
          相关资源
          最近更新 更多