这是我的原始脚本。它将返回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"];
答案 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 \”到如果它正在运行然后返回网址