如何从cocoa app运行JavaScript / AppleScript?
作者:互联网
我正在尝试使用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会更好(这可能很糟糕,但如果您的需求适中则可能就足够了),或者use AppleScript via the AppleScript-ObjC bridge,它允许您的ObjC代码使用基于AppleScript的“类”就像它们是本机Cocoa类一样.鉴于AppleScript是唯一支持的解决方案,它知道如何正确地讲Apple事件(JXA也充满了瑕疵),我推荐后者.
标签:javascript,objective-c,cocoa,applescript,javascript-automation 来源: https://codeday.me/bug/20190609/1206889.html