2013-02-08 2 views
6

Несколько лет назад я написал следующую функцию для одного из моих Firefox дополнения, которые помогают мне получить от платформы символ новой строки:Получение специфического символа новой строки в 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"; 
} 

Это, кажется, работает нормально, но при чтении newline Wikipedia article, я отметил, что последние операционные системы Apple (OS X и более поздние версии) теперь используют стиль линии UNIX \n. Таким образом, моя маленькая функция может возвращать неправильную вещь для этого случая (у меня нет Mac OS, на которой можно ее протестировать).

Есть ли способ заставить Firefox рассказать мне, что такое символ новой строки? Возможно, какая-то встроенная функция полезности? Я использую эти строки в текстовых файлах, которые пишет мой внутренний номер, и я хочу использовать конкретную платформу, чтобы файлы выглядели соответствующими в разных системах.

Update (2-13-2013): Так на вызов работает на navigator.platform.toLowerCase() функцию на Mac-мини (OS X), я получаю значение macintel вывода. Это приведет к тому, что моя функция вернет \r вместо \n, как и следовало ожидать.

+1

Не мой ответ, а умный: http://stackoverflow.com/a/1156388/1883464 – runspired

+0

Там является 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)), но, как вы можете видеть, он устарел, и, что более важно, он предназначен только для внутреннего использования. – paa

ответ

2

Вот что я в конечном итоге с помощью:

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

Я уверен, что случай «mac» никогда не должен происходить, поскольку он не указан как возможность в переменной OS TARGET (которую я тестирую через свойство OS в nsIXULRuntime).

0

Нет необходимости в какой-либо определения, если вы просто хотите разбить текст на переводы строк, вы могли бы сделать что-то вроде этого:

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

Если вам нужно, лежащей в основе WebServers новой строки, вы можете получить его с помощью вызова Ajax и вернуть что-то вроде этого, если с помощью ASP.NET

Environment.NewLine 
+0

К сожалению, я не создаю HTML (это простой текстовый файл), и меня интересует символ новой строки * клиентской стороны * (то есть ОС, в которой запускается Firefox). –

1

UPDATE 1/16/15: кодировка не обрабатывает новый символ новой строки.

из ИРЦ:

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

Если вы используете OS.File и TextEncoder он кодирует ваши \ п для Os соответствующий (Im вполне уверен): 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". 

Смежные вопросы