在 JavaScript 中确定 OS 换行符

Determine OS newline in JavaScript

我正在生成一个供用户下载的文件,我想为他们的平台插入正确的换行符(\n\r\r\n ).

我知道以下解决方案,但 none 完全解决了我的问题:

解析 navigator.userAgent 可能是检测 OS 以及使用哪个换行符的一种相当可靠的方法。

类似的方法可能会奏效 - 可能需要对针对各个平台测试的 UA 字符串进行一些调整。

如果UA被欺骗了,它也不会工作。

function getLinebreak (){
    var linebreaks =  {
        Windows: "\r\n", 
        Mac: "\n", 
        Linux: "\n"
    }
    for(key in linebreaks){
        if(navigator.userAgent.indexOf(key) != -1){
            return linebreaks[key];
        }
    }
    return "\n"; 
}

注意:您可以安全地只检查它是否 Windows 否则 return \n 在大多数情况下

在大多数情况下,这样的事情也可能有效:

function getLinebreak(){
  if(navigator.userAgent.indexOf("Windows") != -1){
    return "\r\n";
  }
  return "\n";
}

经过一番调查,除了链接 mdn article,我找不到其他任何地方,据说 navigator.platform 已弃用。

两者 WHATWG specs and W3 specs 仍将其包含在他们的生活水平中,并且没有关于弃用的说明。

实际上,w3 工作组 asked in January to Firefox team to remove navigator.oscpu or to make it an aliasnavigator.platform 因为前者仅由该浏览器实现。

注意:mdn 页面声明它自 September 2, 2014 以来已被弃用,但我不确定是什么促使进行此编辑。

无论如何,我认为您可以安全地使用此 navigator.platform 属性 来确定用户 OS 在哪个 运行 上(记住这些信息可以被用户欺骗,但这是他们的问题不是吗?)

编辑

得到@Teoli 的回复,他在 2014 年进行了此编辑:
问题:

Why navigator.platform is marked as deprecated on https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform … ?

答案:

Because the spec asked browser vendor to put as few info in it to avoid fingerprinting. Putting '' would be spec. Don't rely on it.

Link to the mentioned specs request.