Статьи

Как сохранить настройки приложения Adobe AIR с помощью JavaScript

В моей предыдущей статье я был очень рад запуску моего первого приложения AIR под названием Harpoon с использованием только HTML, CSS и JavaScript. Одной из особенностей, которую я не успел обсудить, было то, как вы можете использовать XML-файл для хранения и получения настроек приложения.

Если вы скачали и установили Harpoon, вы, возможно, заметили панель настроек со списком выбора.

Панель Гарпун Настройки

Вот HTML-код для этого поля и его метки:

<label>Refresh every (minutes)</label> 
<select id="pref_refresh" name="pref_refresh">
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
 <option value="4">4</option>
 ...
 <option value="10">10</option>
</select>

Если вы помните, Harpoon суждено стать приложением для просмотра аукционов на сайте Flippa . В конечном итоге это будет контролировать частоту проверки Flippa на новые аукционы, соответствующие вашему запросу. Конечно, вы хотите, чтобы Harpoon запомнил этот параметр, поэтому мы сохраним выбранное значение в файле XML.

Наша задача заключается в следующем:

  • Когда гарпун открыт, мы проверяем, доступен ли файл настроек.
  • Если недоступно, Гарпун должен создать файл и записать значение по умолчанию.
  • Если доступно, Гарпун должен прочитать его и установить значение поля.
  • Всякий раз, когда значение поля изменяется, Гарпун должен записать новое значение в файл настроек.

Это звучит намного сложнее, чем есть на самом деле. Давайте погрузимся, чтобы я мог показать вам.

Сначала некоторые изменения в нашем объекте Harpoon (Если вам нужно подтолкнуть свою память, сделайте объезд и вернитесь к моей предыдущей статье .) Мы хотим сохранить значение обновления и пару других важных значений в объекте Harpoon

 var Harpoon = { 
 ...
 prefsFile : null,
 storePath : null,
 prefs : {
   refresh : 10
 }
}

Я рассмотрю prefsFilestorePathprefsrefresh Здесь мы будем хранить значение обновления, и оно будет доступно в нашем приложении из Harpoon.prefs.refresh

Теперь вернемся к свойствам prefsFilestorePath По соображениям безопасности каждому приложению AIR предоставляется собственный каталог хранения, из которого оно может читать и записывать файлы. Это где наш файл настроек будет находиться. Эти два свойства будут хранить путь к каталогу хранилища приложения и путь к файлу настроек.

Если вы помните из предыдущей статьи, у Harpoon есть функция инициализации для инициализации, где мы поместили этот вызов в функцию init Мы добавим несколько строк кода к этому:

 setupWindow

Мы используем init : function() {
 Harpoon.setupWindow();
 Harpoon.storePath = air.File.applicationStorageDirectory;
 Harpoon.prefsFile = Harpoon.storePath.resolvePath("prefs.xml");
 Harpoon.getPrefs();
 ...
},
Затем мы используем метод air.File.applicationStorageDirectoryresolvePathprefs.xml Следующая строка, File

Функция Harpoon.getPrefs() Файл настроек по умолчанию будет выглядеть так:

 getPrefs

Вот функция <?xml version="1.0" encoding="utf-8"?>
<preferences>
 <refresh>10</refresh>
</preferences>

 getPrefs

Сначала мы проверяем, существует ли файл предпочтений, используя удобно именуемое свойство getPrefs : function() {
 if (Harpoon.prefsFile.exists) {
   ...
 } else {
   ...
 }
},
existsFile
Если он существует, то мы читаем содержимое, используя пользовательскую функцию, которую вы увидите через init

 readXML

Затем мы находим первый элемент  if (Harpoon.prefsFile.exists) {
   var xml = Harpoon.readXML(Harpoon.prefsFile);
refresh

 Harpoon

В jQuery    Harpoon.prefs.refresh = parseInt($(xml).find('refresh:eq(0)').text()); В приведенном выше коде :eq(index)refresh:eq(0)

Последний шаг в этой ветви — установить значение поля select, снова используя jQuery:

 refresh

С другой стороны, если нет файла настроек, мы хотим создать его:

     $('#pref_refresh option[value=' + Harpoon.prefs.refresh + ']').attr("selected","selected");

Функция  } else {
   Harpoon.savePrefs();
 }

 savePrefs

Это простая функция, которая создает строку, представляющую теги XML, и сохраняет ее в файле настроек с помощью пока невидимой функции savePrefs : function() {
 var cr = air.File.lineEnding;
 var prefsXML =   '<?xml version="1.0" encoding="utf-8"?>' + cr
     + '<preferences>' + cr  
     + '  <refresh>' + Harpoon.prefs.refresh + "</refresh>" + cr
     + '</preferences>';
 Harpoon.writeXML(Harpoon.prefsFile, prefsXML);
},
Текущее значение writeXML Вы можете заметить использование Harpoon.prefs.refresh это свойство представляет символ конца строки на платформе, который отличается в Mac OS X, Windows и Linux.

Теперь о тех air.File.lineEndingreadXMLwriteXML В Adobe AIR, если вы хотите читать и записывать файлы в JavaScript, вам нужно использовать объект FileStream Сначала файл readXMLFileStreamFile FileStreamxml

 readXML : function(path) { 
 var stream = new air.FileStream();
 stream.open(path, air.FileMode.READ);
 var xml = stream.readUTFBytes(stream.bytesAvailable);
 stream.close();


Далее мы используем объект DOMParser
   var domParser = new DOMParser(); 
 xml = domParser.parseFromString(xml, "text/xml");
 return xml;
},

Функция writeXMLFileStream Эта функция принимает объект File

 writeXML : function(path, xml) {   
 var stream = new air.FileStream();
 stream.open(path, air.FileMode.WRITE);
 stream.writeUTFBytes(xml);
 stream.close();
},

Мы что-нибудь забыли? Есть еще одна задача. Когда пользователь изменяет значение предпочтения в интерфейсе, мы хотим, чтобы Гарпун сохранил это предпочтение. Все, что нужно, это простой прослушиватель событий:

 $('#pref_refresh').change(function(){ 
 Harpoon.prefs.refresh = this.options[this.selectedIndex].value;
 Harpoon.savePrefs();
});

Приведенный выше код связывает функцию, которая будет выполняться каждый раз, когда изменяется значение списка выбора. Функция сохраняет новое значение предпочтения и вызывает функцию savePrefs Мы добавим это к функции setupWindow

И там у нас это есть. Чтение и запись настроек в файл XML с использованием JavaScript в приложении Adobe AIR: просто! Исходный код может быть загружен, а также упакованное приложение . Надеемся, что этого было достаточно для того, чтобы вы могли реализовать настройки в своем приложении AIR.