在 JavaScript 中确定 OS 换行符
Determine OS newline in JavaScript
我正在生成一个供用户下载的文件,我想为他们的平台插入正确的换行符(\n
、\r
或 \r\n
).
我知道以下解决方案,但 none 完全解决了我的问题:
- 正在查询
navigator.platform
或 navigator.appVersion
。这些属性是 deprecated,所以我不想依赖它们。
- 有针对 Firefox and NodeJS 的具体方法。这些不适用,因为我正在创建一个网站,如果它适用于所有浏览器,我会更喜欢。
- 有方法可以找到the browser's newline characters,但我对用户的平台感兴趣。 (它们是不同的:Firefox 始终使用
\n
,而不管 OS。)
解析 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 alias 至 navigator.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.
我正在生成一个供用户下载的文件,我想为他们的平台插入正确的换行符(\n
、\r
或 \r\n
).
我知道以下解决方案,但 none 完全解决了我的问题:
- 正在查询
navigator.platform
或navigator.appVersion
。这些属性是 deprecated,所以我不想依赖它们。 - 有针对 Firefox and NodeJS 的具体方法。这些不适用,因为我正在创建一个网站,如果它适用于所有浏览器,我会更喜欢。
- 有方法可以找到the browser's newline characters,但我对用户的平台感兴趣。 (它们是不同的:Firefox 始终使用
\n
,而不管 OS。)
解析 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 alias 至 navigator.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.