Как заработать в сети internet
Четверг, 02-Май-2024, 18:30
Меню сайта

Форма входа

Поиск

Календарь
«  Ноябрь 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930

Архив записей

Друзья сайта
  • Úklid v Praze

  • Статистика



    Онлайн всего: 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 привязывается к нашему файлу. Если потребуется считать из другого файла - надо создать новый объект. Но можно впоследствии создать прототип функции, которая поменяет свойства объекта на требуемые. Это на будущее...
    Просмотров: 584 | Добавил: websponsory | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Copyright MyCorp © 2024
    Бесплатный хостинг uCoz