如何使用[[NSAppleScript alloc] initWithSource检查应用程序是否正在运行:

时间:2011-09-07 03:54:28

标签: objective-c macos cocoa applescript applescript-objc

这是我的原始脚本。它将返回Safari的当前URL

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

如果我想在要求脚本返回URL之前检查Safari浏览器是否打开,该怎么办?

以下是我在applescript编辑器中的操作。所以这个脚本会检查Safari是否正在运行..这适用于AppleScript编辑器

tell application "Safari"
        if it is running then

            //return url code here
        end if
    end tell

我现在需要的是通过使用'[[NSAppleScript alloc] initWithSource:'

直接从我的cocoa app调用脚本

我试过这个但是没有用

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

3 个答案:

答案 0 :(得分:4)

为什么会这样? AppleScript语法很糟糕。

有一些方法可以在不使用AppleScript的情况下完成此操作,但现在也可以。通过使用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 :(得分:1)

OP的AppleScript单行代码错误。这里的AppleScript文本应该有效:

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

答案 2 :(得分:0)

正如dougscripts(+1)所指出的那样,但我想更清楚地说明为什么OP尝试的NSAppleScript中的单行内容Applescript语法不起作用。

说实话,我确实建议编辑丢失了三到两个

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 \”如果它正在运行然后返回网址