在Windows和* nix系统上考虑javascript中的换行符

时间:2014-10-02 11:45:30

标签: javascript

以下是将Addon代码保存到文件的代码 这在*nix系统上完美运行。

代码从UI中获取当前选定的文本(可能包含newline个字符)并将此字符串保存到文件中。
问题是在Windows上,在newline中打开文本文件时,不会保留Notepad个字符。
我理解\r\nWindows上的正确回车符,但我如何支持Windows*nix系统,而无需解析/替换用户选择的字符串?

var {Cc,Ci,Cu,components} = require("chrome"),
    ContextMenu = require("sdk/context-menu");

Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");

var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile),
    ostream,
    string;

file.initWithPath('C:\Users\rob');
file.append('Test.txt');

try{        

    if (file.exists() === false) {file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 420);}

        ostream = FileUtils.openSafeFileOutputStream(file, FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE);

        var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
        converter.charset = "UTF-8";

        string += 'First' + '\n\n';
        string += 'Second' + '\n\n';

        var istream = converter.convertToInputStream(string + ContextMenu.SelectionContext());

        NetUtil.asyncCopy(istream, ostream, function(status) {

            if (!components.isSuccessCode(status)) {

                alert('failure');

            }else{

                alert('success');
            }
        });

    } catch (e) {
        return false;
    }
}

这是Windows

的结果

enter image description here

这是Linux上的结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

最后还是这样......

if (System.getPlatform().indexOf('win') >= 0){
    var combinedString = string + ContextMenu.SelectionContext();
    combinedString = combinedString.replace(/[\n]/g, '\r\n');
}