以下是将Addon
代码保存到文件的代码
这在*nix
系统上完美运行。
代码从UI中获取当前选定的文本(可能包含newline
个字符)并将此字符串保存到文件中。
问题是在Windows
上,在newline
中打开文本文件时,不会保留Notepad
个字符。
我理解\r\n
是Windows
上的正确回车符,但我如何支持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
:
这是Linux
上的结果:
答案 0 :(得分:0)
最后还是这样......
if (System.getPlatform().indexOf('win') >= 0){
var combinedString = string + ContextMenu.SelectionContext();
combinedString = combinedString.replace(/[\n]/g, '\r\n');
}