在JavaScript中确定OS换行符

我正在生成供用户下载的文件,并且我想为他们的平台插入正确的换行符( nrrn )。

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

  • 查询navigator.platformnavigator.appVersion 。 这些属性已被弃用,所以我不想依赖它们。
  • Firefox和NodeJS有特定的方法。 这些不适用,因为我正在创建一个网站,而且我更喜欢它是否适用于所有浏览器。
  • 有许多方法可以找到浏览器的换行符,但我对用户的平台很感兴趣。 (这些不同:Firefox总是使用n ,而不管操作系统如何。)

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

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

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

    注意:mdn页面声明它自2014年9月2日起已被弃用,但我不确定是什么促成了此编辑。

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

    编辑

    @Teoli在2014年进行了编辑:
    题 :

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

    答:

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

    链接到提到的规格请求。


    解析navigator.userAgent可能是检测OS的合理可靠方法,因此可能使用哪种换行符。

    有些东西可能会诀窍 - 可能需要针对单个平台测试的UA字符串进行一些调整。

    如果UA被欺骗,它也不起作用。

    function getLinebreak (){
        var linebreaks =  {
            Windows: "rn", 
            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 "rn";
      }
      return "n";
    }
    
    链接地址: http://www.djcxy.com/p/87859.html

    上一篇: Determine OS newline in JavaScript

    下一篇: Optimization for newest iPad Pro Simulator