Как проверить, работает ли приложение, используя [[NSAppleScript alloc] initWithSource: - PullRequest
0 голосов
/ 07 сентября 2011

Это мой оригинальный сценарий. Будет возвращен текущий URL Safari

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to return URL of front document as string"];

Что делать, если я хочу проверить, открыт браузер Safari или нет, прежде чем просить скрипт вернуть URL?

Вот как я это делаю в редакторе яблочного скрипта. Итак, этот скрипт проверит, работает ли Safari или нет. Это работает в редакторе яблочного скрипта

tell application "Safari"
        if it is running then

            //return url code here
        end if
    end tell

Теперь мне нужно сразу вызвать скрипт из моего приложения с какао, используя '[[NSAppleScript alloc] initWithSource:'

Я пробовал это, но это не работает

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" if it is running to return URL of front document as string"];

Ответы [ 3 ]

4 голосов
/ 07 сентября 2011

Почему это работает? Это плохая грамматика AppleScript.

Есть способы сделать это, не прибегая к AppleScript, но пока это подойдет. Вы можете иметь несколько строк во встроенном скрипте, используя escape-последовательность C \n для вставки новой строки:

NSString *source = @"tell application \"Safari\"\nif it is running then\nreturn URL of front document as string\nend if\nend tell";

Вы также можете разбить строковую константу, поместив одну за другой, что облегчает чтение:

NSString *source =
    @"tell application \"Safari\"\n"
        "if it is running then\n"
            "return URL of front document as string\n"
        "end if\n"
    "end tell";

Компилятор C склеит эти строковые константы вместе в один NSString объект.

1 голос
/ 24 июля 2013

Неправильный код однострочного кода AppleScript для OP. Текст AppleScript в этом должен работать:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to if it is running then return URL of front document as string"];
0 голосов
/ 24 июля 2013

Как указали dougscripts (+1), но я хотел немного прояснить, почему синтаксис Applescript с одним вкладышем в NSAppleScript, который пробовал OP, не работал.

И, честно говоря, я предложил редактирование, в котором проиграли три-два

Код NSAppleScript ОП:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" if it is running to return URL of front document as string"];

Не работает, потому что синтаксис неправильный.

Правильный синтаксис должен быть:

NSAppleScript *scriptURL= [[NSAppleScript alloc] initWithSource:@"tell application \"Safari\" to if it is running then return URL of front document as string"];

В части кода, выделенного жирным шрифтом ниже, есть два изменения.

\ "Safari \" до , если он работает , тогда возврат URL

...