【问题标题】:Determine OS newline in JavaScript在 JavaScript 中确定操作系统换行符
【发布时间】:2015-12-10 00:06:15
【问题描述】:

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

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

  • 正在查询navigator.platformnavigator.appVersion。这些属性是deprecated,所以我不想依赖它们。
  • FirefoxNodeJS 有特定的方法。这些不适用,因为我正在创建一个网站,我希望它适用于所有浏览器。
  • 有办法找到the browser's newline characters,但我对用户的平台感兴趣。 (它们不同:Firefox 始终使用\n,与操作系统无关。)

【问题讨论】:

  • @ub3rst4r 这个问题是关于浏览器的换行符,而不是底层平台。
  • @Kaiido 该属性似乎支持only by Firefox
  • 实际上,我找不到除了在这个 mdn 文档中的其他地方,据说 navigator.platform 已被弃用,它不在 Living Standards
  • 为了确认这一点,我应该问问 mdn 的人为什么这么说(可能与 this proposal 有关,但不能确定。)

标签: javascript newline


【解决方案1】:

解析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";
}

【讨论】:

    【解决方案2】:

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

    WHATWG specsW3 specs 仍然将它包含在他们的生活标准中,并且没有关于弃用的说明。

    实际上,w3 工作组asked in January to Firefox teamnavigator.oscputo make it an alias 删除为navigator.platform,因为前者仅由该浏览器实现。

    注意:mdn 页面声明它自 September 2, 2014 以来已被弃用,但我不确定是什么推动了这次编辑。

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

    编辑

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

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

    答案:

    因为规范要求浏览器供应商输入尽可能少的信息 它以避免指纹识别。放 '' 将是规范。不要依赖 它。

    Link to the mentioned specs request.

    【讨论】:

    • 值得注意的是,他同意整个 ClientIdentification API 应该有这个标头(包括navigator.userAgent)。
    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2014-12-18
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2016-12-11
    相关资源
    最近更新 更多