Меню сайта |
|
|
Форма входа |
|
|
Поиск |
|
|
Календарь |
|
|
Архив записей |
|
|
Статистика |
Онлайн всего: 1 Гостей: 1 Пользователей: 0 |
|
|
| | |
| Главная » 2013 » Ноябрь » 18 » И снова о работе с файлами из ФФ с помощью жабаскрипта.
19:30 И снова о работе с файлами из ФФ с помощью жабаскрипта. |
После написания статьи прошло достаточно много времени. И захотелось сделать нечто более универсальное. Для начала надо отделить наш прототип от основного скрипта. Поэтому в основной скрипт пишем:
Код Components.classes["@mozilla.org/moz/jssubscript-loader;1"] .getService(Components.interfaces.mozIJSSubScriptLoader) .loadSubScript("file:///c:/path/to/file/name.js?" + Math.random()); В идеале хорошо бы выделить отдельный каталог вроде "c:\scripts" под такие вложения, поскольку ими вполне можно будет пользоваться не один раз. Случайное число прибавляется к имени для того, чтобы ФФ не складировал наш прототип в кеш и нам не требовалось бы каждый раз перезапускать браузер, при малейших изменениях. Пока ничего сложного. Теперь создаем новый файл со следующим содержимым и укладываем его по вызову:
Код var fW = function (Name, Path) { if (!(this instanceof fW)) { return new fW(fileName, filePath) } // все равно объект получите!!! var Cc = Components.classes; var Ci = Components.interfaces; this.fileName = Name; this.filePath = Path; this.file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsILocalFile); this.file.initWithPath(this.filePath); this.file.appendRelativePath(this.fileName); };
fW.prototype.readFileAll = function(){ this.stream = Cc["@mozilla.org/network/file-input-stream;1"] .createInstance(Ci.nsIFileInputStream); this.stream.init(this.file,0x01, 00004, null); this.streamSize = Cc["@mozilla.org/scriptableinputstream;1"] .createInstance(Ci.nsIScriptableInputStream); this.streamSize.init(this.stream); return this.streamSize.read( this.streamSize.available() ); } На данный момент наш "классик" состоит из конструктора, который инициализирует основные переменные и одного прототипа функции, которая читает содержимое файла. Полностью. Прототипом мы добиваемся того, что при создании нескольких объектов, с помощью данного конструктора, функции не копируются в сам объект, а остаются в единственном экземпляре, и разделяются нашими объектами.
Ну и главное, как же этим всем пользоваться. Все достаточно просто. Вот пример загрузки содержимого файла в переменную:
Код var file = new fW("my_file.txt", "c:\\path\\to\\my\\file\\here"); var contents = file.readFileAll(); Мы просто создаем объект. При начальной инициализации переменная file привязывается к нашему файлу. Если потребуется считать из другого файла - надо создать новый объект. Но можно впоследствии создать прототип функции, которая поменяет свойства объекта на требуемые. Это на будущее...
|
Просмотров: 625 |
Добавил: websponsory
| Рейтинг: 0.0/0 |
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
| |
| | |
|