2013-02-08 7 views
6

Anni fa, ho scritto la seguente funzione per uno dei miei Firefox add-on che mi aiuta a ottenere una specifica piattaforma carattere nuova riga:Come ottenere il carattere di nuova riga della piattaforma in JavaScript?

GetNewLine: function() 
{ 
    var platform = navigator.platform.toLowerCase(); 

    if(platform.indexOf('win') != -1) // Windows 
     return "\r\n"; 
    else if(platform.indexOf('mac') != -1) // Mac 
     return "\r"; 
    else // *nix 
     return "\n"; 
} 

Questo sembra funzionare bene, ma dopo aver letto la newline Wikipedia article, ho notato che i recenti sistemi operativi Apple (OS X e successivi) ora utilizzano lo stile UNIX \n per terminare la riga. In quanto tale, la mia piccola funzione potrebbe restituire la cosa sbagliata per quel caso (non ho un Mac OS su cui testarlo).

C'è un modo per far sapere a Firefox quale è il carattere di nuova riga specifico della piattaforma? Forse una sorta di funzione di utilità incorporata? Sto usando questi newline nei file di testo scritti dalla mia estensione e voglio utilizzare quello specifico della piattaforma, in modo che i file sembrino appropriati su vari sistemi.

Aggiornamento (2013/02/13): Così mentre state usando la chiamata navigator.platform.toLowerCase() funzione su un Mac-mini (OS X), ottengo il valore di uscita macintel. Ciò comporterebbe la mia funzione restituendo \r anziché \n come dovrebbe.

+1

Non la mia risposta, ma quella intelligente: http://stackoverflow.com/a/1156388/1883464 – runspired

+0

Là è un'API ([nsLinebreakConverter.cpp] (http://mxr.mozilla.org/mozilla-central/source/xpcom/io/nsLinebreakConverter.cpp) [nsLinebreakConverter.h] (http://mxr.mozilla.org/ mozilla-central/source/xpcom/io/nsLinebreakConverter.h)), ma come puoi vedere è obsoleto e, soprattutto, è solo per uso interno. – paa

risposta

2

Ecco quello che ho finito per usare:

GetNewLine: function() 
{ 
    var OS = Components.classes["@mozilla.org/xre/app-info;1"]. 
      getService(Components.interfaces.nsIXULRuntime).OS; 

    return /winnt|os2/i.test(OS) ? "\r\n" : /mac/i.test(OS) ? "\r" : "\n"; 
} 

Sono abbastanza sicuro che il caso "mac" non dovrebbe mai accadere, visto che non è elencato come una possibilità nella variabile OS TARGET (che sto testando tramite la proprietà OS in nsIXULRuntime).

0

Non c'è bisogno di alcun determinare se si desidera solo per dividere il testo su nuove righe, si potrebbe fare qualcosa di simile:

htmlstring = sNewLine.replace(/(\r\n|\n|\r)/gm, "<br>"); 

Se è necessario il server web sottostante a capo, si può ottenere con una chiamata AJAX e restituire qualcosa di simile se si utilizza ASP.NET

Environment.NewLine 
+0

Sfortunatamente, non sto generando alcun HTML (è un semplice file di solo testo), e sono interessato al carattere di nuova riga * del client * (cioè il sistema operativo in cui viene eseguito Firefox). –

1

AGGIORNAMENTO 1/16/15: la codifica non gestisce il carattere di nuova riga specifico di OS.

da irc:

07:49 futpib i guess encoding is for charset only 
07:49 Will character encoding is nothing to do with OS-specific line-endings 

Se si utilizza OS.File e la TextEncoder esso codifica \ n al sistema operativo appropriato (im abbastanza sicuro): https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread

let encoder = new TextEncoder();         // This encoder can be reused for several writes 
let array = encoder.encode("This is some text");     // Convert the text to an array 
let promise = OS.File.writeAtomic("file.txt", array,    // Write the array atomically to "file.txt", using as temporary 
    {tmpPath: "file.txt.tmp"});         // buffer "file.txt.tmp".