繁体   English   中英

在JavaScript中确定操作系统换行符

[英]Determine OS newline in JavaScript

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

我知道以下解决方案,但没有一个能完全解决我的问题:

  • 查询navigator.platformnavigator.appVersion 这些属性已弃用 ,因此我宁愿不要依赖它们。
  • 有针对FirefoxNodeJS的特定方法。 这些都不适用,因为我正在创建一个网站,所以我希望它在所有浏览器上都有效。
  • 有多种方法可以找到浏览器的换行符 ,但是我对用户的平台感兴趣。 (这是不同的:Firefox始终使用\\n ,而不管操作系统如何。)

解析navigator.userAgent可能是检测操作系统的合理可靠方法,因此可以检测使用哪个换行符。

可能会达到目的的方法-可能需要对已针对各个平台测试的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,否则在大多数情况下返回\\ n

这样的事情在大多数情况下也可能适用:

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

经过一番调查,除了链接的mdn文章之外,我找不到其他地方,据说navigator.platform已被弃用。

WHATWG规范W3规范仍将其包含在其生活标准中,并且没有关于弃用的说明。

实际上,w3工作组在一月份曾要求Firefox团队删除navigator.oscpu使其成为 navigator.platform 的别名 ,因为前者仅由此浏览器实现。

注意:mdn页面指出,自20149月2日起已弃用该页面但我不确定是什么促使了此编辑。

无论如何,我认为您可以安全地使用此navigator.platform属性来确定用户所运行的操作系统(请记住,这些信息可能会被用户欺骗,但这是他们的问题不是吗?)

编辑

得到了@Teoli的回应,他在2014年进行了此修改:
题 :

为什么在https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/platform上将navigator.platform标记为已弃用...?

答:

因为该规范要求浏览器供应商在其中添加尽可能少的信息以避免指纹。 放入“”将是规格。 不要依赖它

链接到上述规格要求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM