从XPCOM运行AppleScript

从XPCOM运行AppleScript,applescript,xpcom,Applescript,Xpcom,我一直试图通过XPCOM执行applescript代码,但无论我做什么,它似乎都不起作用,观察者告诉我,过程完成时没有问题,但什么都没有发生 var processArgs = ['-e','\'tell application "iTunes"\'','-e','\'activate\'','-e','\'end tell\'']; var file = Cc["@mozilla.org/file/local;1"].createInstance(Components.interfaces.

我一直试图通过XPCOM执行applescript代码,但无论我做什么,它似乎都不起作用,观察者告诉我,过程完成时没有问题,但什么都没有发生

var processArgs = ['-e','\'tell application "iTunes"\'','-e','\'activate\'','-e','\'end tell\''];

var file = Cc["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
file.initWithPath( '/usr/bin/osascript');

var process = Cc["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init( file );

var observer = {
    observe: function( subject, topic ) {
        SiteFusion.consoleMessage('DONE ' + topic);
    }
}

process.runAsync( processArgs, processArgs.length, observer );

控制台中的输出是“完成进程完成”的,因此它应该可以工作,有人知道此脚本拒绝打开iTunes的原因吗?

原因是您在参数中使用了转义单引号,因此实际生成的AppleScript如下所示:

'tell application "iTunes"'
'activate'
'end tell'
这显然是无效的。相反,您的参数应该如下所示:

const processArgs = ['-e', 'tell application "iTunes"', '-e', 'activate', '-e', 'end tell'];
或者,或者

const processArgs = ['-e', `
    tell application "iTunes"
        activate
    end tell`];
const processArgs = ['-e', 'tell application "iTunes" to activate'];
或者,或者

const processArgs = ['-e', `
    tell application "iTunes"
        activate
    end tell`];
const processArgs = ['-e', 'tell application "iTunes" to activate'];