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

AppleScript在脚本编辑器中工作,但不作为应用程序,applescript,fullscreen,systemevent,Applescript,Fullscreen,Systemevent,我对编程相当陌生,尤其是AppleScript。我为情人节写了一个简单的脚本,从iTunes播放一首歌,然后在Safari中打开一个flash动画文件。当我在ScriptEditor中运行脚本时,一切正常,但当我作为独立应用程序导出时,它在启用全屏模式的命令处失败。我假设这是系统事件的问题。很明显,应用程序一直工作到最后,但在击键命令下,我听到一个警报声,窗口保持原样 我正在运行约塞米蒂,并完全更新 理想情况下,我想在Google Chrome中打开该文件以利用演示模式,但我甚至无法让Chrom

我对编程相当陌生,尤其是AppleScript。我为情人节写了一个简单的脚本,从iTunes播放一首歌,然后在Safari中打开一个flash动画文件。当我在ScriptEditor中运行脚本时,一切正常,但当我作为独立应用程序导出时,它在启用全屏模式的命令处失败。我假设这是系统事件的问题。很明显,应用程序一直工作到最后,但在击键命令下,我听到一个警报声,窗口保持原样

我正在运行约塞米蒂,并完全更新

理想情况下,我想在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

这是约塞米蒂,MacOSX10.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

下面是一个特别好的方法,可以查看应用程序是否被批准用于UI脚本:。除此之外,如果一个应用程序试图使另一个应用程序全屏显示,这可能是一个问题?这个解决方案对我很有效。我想知道的是,为什么脚本作为应用程序运行时需要延迟,而不是在脚本编辑器中?很难说为什么。这完全取决于在任何给定点上您的计算机活动水平。无论何时编写gui脚本,您都应该在测试时使用延迟,然后在优化时继续降低延迟时间,直到它们尽可能小而不会导致错误。很高兴这对你有用。祝你好运