Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Создание файла в скрипте для Mozilla Firefox


Автор: Чучмек 31.3.2010, 11:11
Здравствуйте. 
Подскажите пожалуйста, как (нужно только для  Windows )в скрипте для Mozilla Firefox сохранить строку в текстовый файл и запустиь на выполнение exe?
Я переделываю плагин IE под Firefox.
В IE скрипт у меня выглядит как:
Код

<script language="JavaScript" type="text/javascript"> 
var str="Это надо сохранить в файл";
var filename="D:\\abc\\html.txt";
var exename="D:\\abc\\project1.exe";

var fso=new ActiveXObject("Scripting.FileSystemObject");
var myfile = fso.CreateTextFile(filename,true);
myfile.Write(str);
fso.close;

var Myshell = new ActiveXObject("WScript.Shell");
Myshell.Run(exename+" "+filename);
</script>

Подскажите пожалуйста как записать это дял мозиллы?
Спасибо.

Автор: EmilRegis 31.3.2010, 11:15
никак

Добавлено через 1 минуту и 3 секунды
В Firefox нет поддержки ActiveX

Автор: Чучмек 31.3.2010, 11:32
А кто сказал что ActiveX?
Я ведь пишу плагин, а не скрипт для страницы. Можно использовать внутренний интерфейс платформы Mozilla.
Я даже нашел кое что:

Код

<script language="JavaScript" type="text/javascript"> 
var file;
var CcLF = Components.classes["@mozilla.org/local/file;1"];
var CiLF = Components.interfaces.nsILocalFile;
var file = CcLF.createInstance(CiLF);

file.initWithPath("C:\\WINDOWS\NOTEPAD.EXE");


var Cc = Components.classes;
var Ci = Components.interfaces;
var mode_bits = 0x01; // from nsIFileChannel
var perm_bits = 0; // from Unix/Posix open(2)
var file_bits = 0; // from nsIFileInputStream

var stream;


// [1] Непосредственное создание
stream = Cc["@mozilla.org/network/file-input-stream;1"];
stream = stream.createInstance(Ci.nsIFileInputStream);
stream.init(file, mode_bits, perm_bits, file_bits);

// [2] Создание на основе транспорта
var trans = Cc["@mozilla.org/network/stream-transport-service;1"];
trans = trans.getService(Ci.nsIStreamTransportService);
trans = trans.createInputTransport(stream,0,-1,true);
var stream2 = trans.openInputStream(0,-1,0);

// [3] Создание на основе канала
var channel = Cc["@mozilla.org/network/local-file-channel;1"]
channel = channel.createInstance(Ci.nsIFileChannel);
channel.init(file, mode_bits, perm_bits);
stream = channel.open();

// В любом случае, работа с потоком средствами JavaScript

var s2 = Cc["@mozilla.org/scriptableinputstream;1"];
s2 = s2.createInstance(Ci.nsIScriptableInputStream);
s2.init(stream);

var bytes = 100;
var content = null;
content = s2.read(bytes);
</script>


но только не могу разобратся

Автор: Чучмек 31.3.2010, 17:53
Записать в файл:
Код

function fromUnicode(charset, data){
var uniConv=Components.classes["@mozilla.org/intl/scriptableunicodeconverter"];
uniConv=uniConv.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
uniConv.charset = charset;
data = uniConv.ConvertFromUnicode(data);
return data;
};



var newFile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
newFile.initWithPath("D:\\");
newFile.appendRelativePath('file.txt');
if(!newFile.exists()){
    alert('Файл еще не существует, но будет создан '); 
    newFile.create(0x00, 0666);
    }else{alert('Файл уже существует и будет перезаписан');}

var stream;

stream = Components.classes['@mozilla.org/network/file-output-stream;1'];
stream = stream.createInstance(Components.interfaces.nsIFileOutputStream);
stream.init(newFile,2,0,0);
var str='Это надо сохранить';

str=fromUnicode("windows-1251",str);
stream.write(str, str.length);

stream.close();
alert('+');

Прочитать из файла:
Код

function toUnicode(charset, data){
var uniConv = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'];
uniConv = uniConv.createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
uniConv.charset = charset;
data = uniConv.ConvertToUnicode(data);
return data;
 };



var conv = Components.classes["@mozilla.org/network/protocol;1?name=file"];
conv = conv.createInstance(Components.interfaces.nsIFileProtocolHandler);
var url ="file:\\\D:\\file.txt";
var file = conv.getFileFromURLSpec(url);

var file_size=file.fileSize; 

var stream;
stream = Components.classes["@mozilla.org/network/file-input-stream;1"];
stream = stream.createInstance(Components.interfaces.nsIFileInputStream);
stream.init(file, 1, 0,0);


var s2 = Components.classes["@mozilla.org/scriptableinputstream;1"];
s2 = s2.createInstance(Components.interfaces.nsIScriptableInputStream);
s2.init(stream);


var content = null;
content = s2.read(file_size);
stream.close();

str=toUnicode("windows-1251",content.toString());

alert(str);


Осталось только найти как запускать exe на выполнение.

Автор: mxt 1.4.2010, 21:50
https://developer.mozilla.org/en/Code_snippets/Running_applications

а для работы с файлами можно использовать io.js:
http://kb.mozillazine.org/Io.js


и еще почитай о:
https://developer.mozilla.org/en/FileGuide/IO

так на будущее)

Автор: Чучмек 3.4.2010, 15:52
Цитата(mxt @ 1.4.2010,  21:50)
https://developer.mozilla.org/en/Code_snippets/Running_applications


 smile 
mxt большое спасибо.

Автор: Чучмек 4.4.2010, 19:50
А возможно повторить это для оперы?

Автор: mxt 4.4.2010, 20:14
хз,  у оперы туго с разширениями,  аналог виджеты не подходят (нету такого низкоуровнего доступа)

Автор: Чучмек 4.4.2010, 21:00
А есть хоть какой-нибудь способ запустить exe?

Автор: mxt 4.4.2010, 23:13
не знаю такого.   а зачем в общем запускать exe ?

Автор: Чучмек 5.4.2010, 12:46
Цитата(mxt @  4.4.2010,  23:13 Найти цитируемый пост)
а зачем в общем запускать exe 

Надо сделать кнопку на панели браузера, при нажатии на которую запускалсяб exe и обрабатывал фрагмент html кода. Самое простое - сохранить  фрагмент в файл, и передать имя файла запускаемой программе, как параметр командной строки.
Писать полноценный прагин, подключаемый к браузеру в виде dll, в данном случае, неохота (нет времени разбиратся, хотя в будщем собираюсь).
Для оперы, кстати, кнопка с запуском exe создается в виде записи типа
Код

Button№, "name"="Execute program,"C:\windows\notepad.exe","D:\f.txt", , ,"
 
в файле standard_toolbar.ini
А html код можно попробовать сохранить скриптом в cookie, а потом найти его exeшником в файле cookies.dat (или где там у оперы cookieсы?).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)