繁体   English   中英

如何从cocoa app运行JavaScript / AppleScript?

[英]How to run JavaScript/AppleScript from cocoa app?

我正在尝试使用NSAppleScript从Objective-C执行一些AppleScript ...但是,我正在尝试的代码是Yosemite中用于自动化的新JavaScript。 它在运行时似乎没有做任何事情,但是,正常的AppleScript工作正常。

[NSApp activateIgnoringOtherApps:YES];
NSAppleScript *scriptObject = [[NSAppleScript alloc] initWithSource:
                               @"\n\
                                    iCal = Application(\"Calendar\");\n\
                                    iCal.includeStandardAdditions = true;\n\
                                    iCal.activate();\n\
                                    iCal.displayAlert(\"testing\");\n\
                               "];

[scriptObject executeAndReturnError: nil];

我怎么能让它运行?

谢谢

NSAppleScript是硬连线的,可以将源代码编译为AppleScript。 您需要使用OSAKit,这是伪劣的和未记录的,但至少允许您指定从源代码编译时使用的语言。 或者,您可以通过将源代码传递给osacompile -l JavaScript来解决变通方法,然后将生成的.scpt文件加载到NSAppleScript中。

但是,从您的示例中不清楚为什么使用NSAppleScript。 如果你想执行用户提供的脚本,你应该看看NSUserAppleScriptTask:它甚至比NSAppleScript更糟糕,但是它被设计为在应用程序沙箱外的子进程中运行脚本。 (NSAppleScript在进程中运行脚本,它在沙盒应用程序中阻止用户脚本与任意应用程序通信。)

OTOH,如果您只使用NSAppleScript来运行自己的代码,那么使用Scripting Bridge会更好(这很糟糕且很糟糕,但如果您的需求适中则可能就足够了),或者通过AppleScript-ObjC使用AppleScript bridge ,它允许你的ObjC代码使用基于AppleScript的“类”,就像它们是本机Cocoa类一样。 鉴于AppleScript是唯一支持的解决方案,它知道如何正确地讲Apple事件(JXA也充满了瑕疵),我推荐后者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM