0

这是我的原始脚本。它将返回 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:'立即从我的可可应用程序中调用脚本

我已经尝试过了,但它不起作用

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

3 回答 3

4

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

有一些方法可以在不使用 AppleScript 的情况下做到这一点,但现在可以了。\n通过使用 C 转义序列插入换行符,您可以在嵌入式脚本中包含多行:

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对象中。

于 2011-09-07T04:05:30.533 回答
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"];
于 2013-07-24T16:34:39.723 回答
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\"如果它正在运行返回URL

于 2013-07-24T17:59:19.077 回答