Как определить постоянное свойство в JXA
В AppleScript я бы написал
property foo: "value"
и значение будет сохранено между запусками. Как я могу сделать это в Javascript для автоматизации?
1 ответ
Решение
JavaScript для автоматизации не имеет прямой параллели для механизма постоянного свойства (и глобального значения) AS, но он имеет JSON.stringify()
а также JSON.parse()
, которые хорошо работают для простой сериализации и извлечения состояния.
Возможно, что-то вроде:
(function () {
'use strict';
var a = Application.currentApplication(),
sa = (a.includeStandardAdditions = true, a),
strPath = sa.pathTo('desktop').toString() + '/persist.json';
// INITIALISE WITH RECOVERED VALUE || DEFAULT
var jsonPersist = $.NSString.stringWithContentsOfFile(strPath).js || null,
persistent = jsonPersist && JSON.parse(jsonPersist) || {
name: 'perfume',
value: 'vanilla'
};
/*********************************************************/
// ... MAIN CODE ...
// recovered or default value
sa.displayNotification(persistent.value);
// mutated value
persistent.value = "Five Spice"
/*********************************************************/
// WRAP UP - SERIALISE TO JSON FOR NEXT SESSION
return $.NSString.alloc.initWithUTF8String(
JSON.stringify(persistent)
).writeToFileAtomically(strPath, true);
})();
(Более полный пример здесь: https://github.com/dtinth/JXA-Cookbook/wiki/Examples)
Или, для простых пар ключ-значение, а не произвольных структур данных, смотрите: /questions/35470928/ispolzujte-javascript-dlya-avtomatizatsii-jxa-dlya-sozdaniya-spiska/35470945#35470945 о поддержке JXA для записи и чтения.plist