Acabei de testar alguns navegadores usando esse pouco de JavaScript:
function log_newline(msg, test_value) {
if (!test_value) {
test_value = document.getElementById('test').value;
}
console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
+ ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}
log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">
</textarea>
IE8 e Opera 9 no Windows \r\n
. Todos os outros navegadores que testei (Safari 4 e Firefox 3.5 no Windows e Firefox 3.0 no Linux) usam \n
. Todos eles podem lidar \n
muito bem ao definir o valor, embora o IE e o Opera os convertam \r\n
novamente em internamente. Há um artigo do SitePoint com mais alguns detalhes chamados Finalizações de linha em Javascript .
Observe também que isso é independente das terminações de linha reais no próprio arquivo HTML (ambos \n
e \r\n
fornecem os mesmos resultados).
Ao enviar um formulário, todos os navegadores podem canonizar novas linhas %0D%0A
na codificação de URL. Para ver isso, carregue, por exemplo, data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>
e pressione o botão enviar. (Alguns navegadores bloqueiam o carregamento da página enviada, mas você pode ver os valores do formulário codificado por URL no console.)
Eu não acho que você realmente precise fazer muita determinação, no entanto. Se você quiser apenas dividir o texto em novas linhas, faça algo assim:
lines = foo.value.split(/\r\n|\r|\n/g);