Использование OS X JavaScript для автоматизации (JXA) для прослушивания открытого местоположения Apple Event

Я использую OS X JavaScript для автоматизации (JXA) и хочу иметь возможность захватывать событие Apple «открытое местоположение».

Согласно http://www.macosxautomation.com/applescript/linktrigger/, я настроил обработчик URL клиента. Как мне сделать эквивалент

on open location this_URL
  ...
end open location

с JXA? Я пробовал все следующее, но не смог заставить ни одно из них выполниться:

app = Application.currentApplication();
app.includeStandardAdditions = true;

function run() {
   app.displayDialog(JSON.stringify(arguments));
}

function openLocation() {
   app.displayDialog(JSON.stringify(arguments));
}

function openDocuments() {
   app.displayDialog(JSON.stringify(arguments));
}

function onOpenLocation() {
   app.displayDialog(JSON.stringify(arguments));
}

Документация Apple по JXA (https://developer.apple.com/library/mac/releasenotes/InterapplicationCommunication/RN-JavaScriptForAutomation/Articles/OSX10-10.html#//apple_ref/doc/uid/TP40014508-CH109-SW15 ) не обсуждайте, как обрабатывать событие открытия местоположения. Мой сценарий будет открыт, потому что я могу получить предупреждение, если добавлю его вне функций. Я просто не мог заставить функцию выполняться и передаваться по URL-адресу.

Я работаю над этим, используя обработчик AppleScript, который затем вызывает мой код JXA, но это, безусловно, далеко не идеально.

Я также ничего не видел в кулинарной книге JXA (https://github.com/dtinth/JXA-Cookbook ) об этом.


person big lep    schedule 29.12.2015    source источник
comment
Отличный вопрос. Я с нетерпением жду ответа.   -  person JMichaelTX    schedule 29.12.2015
comment
Является ли отсутствие аргумента в сигнатуре вашей функции ошибкой копирования и вставки? Потому что это должно быть function openLocation(thisURL) { // process thisURL }, если оно должно работать…   -  person kopischke    schedule 06.03.2016
comment
@kopischke: нет, я намеренно пропустил параметр URL (например, thisURL). Я использую специальные аргументы, доступные функции JS, чтобы определить, была ли вызвана моя функция. Я полагаю, что пробовал это с явным параметром, как вы предложили, но имеет ли это значение?   -  person big lep    schedule 07.03.2016


Ответы (1)


Как вы предлагаете, трюк (на данный момент), похоже, заключается в немедленной передаче управления второму (JavaScript для автоматизации) скрипту в том же пакете.

on open location strURL
    run script (path to resource "jsHandler.scpt" in directory "Scripts") with parameters {{|URL|:strURL}}
end open location
person houthakker    schedule 27.04.2016
comment
Как получить доступ к параметрам в jsHandler.scpt? Я пробовал перебирать аргументы из функции run(args), но без удовольствия. - person inopinatus; 02.08.2017