AppleScript 在脚本编辑器中工作,但不作为应用程序

AppleScript works in Script Editor but not as application

我对编程还很陌生,尤其是 AppleScript。我为情人节写了一个简单的脚本来播放 iTunes 中的歌曲,然后在 Safari 中打开 flash 动画文件。当我 运行 ScriptEditor 中的脚本时,一切都按预期工作,但是当我作为独立应用程序导出时,它在启用全屏模式的命令中失败。我假设这是系统事件的问题。需要明确的是,应用程序运行到最后,但在击键命令中我听到警报声并且 window 保持原样。

我是运行宁Yosemite,我已经完全更新了。

理想情况下,我想在 Google Chrome 中打开文件以利用演示模式,但我什至无法 Chrome 打开文件。

感谢任何建议!这是代码:

tell application "Finder"
  set visible of every process whose visible is true and name is not "Finder" to false
  close every window
end tell

set volume output volume 75

tell application "iTunes"
  set currentVolume to sound volume
    if player state is playing then
      stop
      back track
    end if
  play track "The Promise"
  set player position to 6
end tell

delay 4

tell application "Safari"
  activate
  if (count of windows) is 0 then -- Remove "if" statement if you don't want to make a new window if there is none
    make new window at front
  end if

open (POSIX path of (path to home folder)) & "/Desktop/beMine/beMine.swf"
  tell application "System Events"
    tell process "Safari" to keystroke "f" using {command down, control down}

  end tell
end tell

您很可能需要允许您的独立应用程序使用系统事件。在某些时候,您需要为脚本编辑器执行此操作;您需要为您的独立应用程序执行相同的操作。

您可以在“系统偏好设置”下的“安全和隐私”、“隐私”和“辅助功能”下找到该选项。会有一个应用程序列表,您的应用程序可能会在没有选中“允许下面的应用程序控制您的计算机”的情况下列出。

您可能需要使用“+”按钮将您的应用添加到列表中。

我已经验证我可以使用这个简单的脚本让 Safari 全屏;如果应用程序在辅助功能下获得许可,它就会工作,否则它将默默地失败。

tell application "Safari"
    activate
end tell

tell application "System Events"
    tell process "Safari" to keystroke "f" using {command down, control down}
end tell

这是Yosemite, Mac OS X 10.10;在其他版本的 Mac OS X.

中可能有所不同

我同意 Jerry Stratton 的评论,即这可能是一个可访问性问题。但是,也可能是您在 Safari 准备好接受之前发出击键命令。如果它正在打开一个文件,那么它可能很忙并且错过了击键命令。

此外,我会将系统事件代码移到 Safari 代码之外,并且只告诉系统事件而不是 Safari 进程来执行击键命令。尝试将其作为 Safari 和系统事件部分。

注意:我也无法 Chrome 打开文件。

tell application "Safari"
    activate
    if (count of windows) is 0 then -- Remove "if" statement if you don't want to make a new window if there is none
        make new window at front
    end if

    open (POSIX path of (path to home folder)) & "/Desktop/beMine/beMine.swf"
end tell

tell application "Safari" to activate
delay 1
tell application "System Events"
    keystroke "f" using {command down, control down}
end tell