我们在使用Safari扩展的过程中,有时会遭遇一些尴尬。以「iTube Studio」为例,这是用来一键下载Youtube视频的插件,但在浏览某些网页时会影响下拉菜单的显示。因此,我们不得不在需要下载Youtube视频的时候启用该插件,而在其他时间令其保持关闭状态。

这是一个听起来容易,实际操作却很麻烦的过程,因为绝大部分Safari扩展都没有快捷键,用户只能手动开关。为此,有个叫「dfay」的海外网友专门写了个Alfred工作流,用于开关Safari扩展。

然而,这个工作流只能控制所有扩展的开关,无法对具体扩展进行控制,使用起来并不方便。因而打算自己动手,丰衣足食。基本思路如下:用Keyboard Maestro建立新的宏命令,以为开关iTube Studio扩展添加快捷键。

首先,在Keyboard Maestro中新建「宏命令组」,将适用范围设定为「Safari」。然后,在该组中新建宏命令「enable/disable iTube Studio」

起先,我尝试用快捷键触发Applescript,以实现开关功能。于是,在Applescript Editor中写了如下代码1

tell application "System Events" to tell process "Safari"
click menu item "偏好设置..." of menu 1 of menu bar item "Safari" of menu bar 1
click button "扩展" of tool bar 1 of window 1
click static text 18 of list 1 of UI element 1 of scroll area 1 of group 1 of group 1 of window 1
click checkbox 1 of group 3 of group 3 of UI element 1 of scroll area 1 of group 1 of group 1 of window 1
click button 1 of window 1
end tell

上述代码很好理解,也就是在按下快捷键后,要求Safari自动点击菜单栏/Safari/偏好设置这一菜单项目,在弹出的偏好设置窗口中点击工具栏/扩展按钮,然后点击「扩展」界面左侧滚动列表中的第18项「iTube Studio」,继而在右边的扩展简介界面中勾选复选框,最后关闭偏好设置窗口,形成闭环工作流。

如果一切顺利,那么我在Safari中按下快捷键后,偏好设置窗口就会被打开,并自动进入扩展面板,勾选iTube Studio插件的复选框,最后自动关闭窗口。

但,事情并不顺利。在上述命令中,存在一个致命的问题:static text 18虽然能被脚本编辑器识别,但无法被click,具体表现为「滚动列表中的iTube Studio」无法被点击,所以在宏命令被执行后,Safari无法准确定位iTube Studio扩展,导致其他扩展被误关(通常是列表中的第一个)。

由于不熟悉Applescript,我决定利用Keyboard Maestro的按键记录功能加拆分脚本文件来重现这一操作。

第一步,添加第一部分代码:

tell application “System Events” to tell process “Safari”
 click menu item “偏好设置…” of menu 1 of menu bar item “Safari” of menu bar 1
 click button “扩展” of tool bar 1 of window 1

end tell

第二步,用record功能记录下「点击扩展列表第一项」的动作。

第三步,添加若干个「点按向下箭头」的动作,直到光标成功定位到「iTube Studio」

第四步,添加第二部分代码:

tell application “System Events” to tell process “Safari”
click checkbox 1 of group 3 of group 3 of UI element 1 of scroll area 1 of group 1 of group 1 of window 1
click button 1 of window 1
end tell

完成上述步骤,就成功地在Keyboard Maestro里为Safari浏览器的iTube Studio扩展添加了快捷键。

另外再推荐一款相当好用的UI Browser,其用途是帮你在应用中定位某个界面部件的层级位置,并且可以高亮选中部件。在你写代码时,如果不清楚该部件的部署位置,可以方便地用UI Browser查看,不过该应用为收费软件,价格55美刀,相当昂贵。互联网上有注册机,耐心寻找可以找到,注册时记得断网,使用时需要通过LittleSnitch、Hands Off!等防火墙应用阻止该UI Browser接入网络。当然,请尽量使用正版软件。


中文系统环境下必须用偏好设置...扩展来替代「Preferences...」和「Extensions」等菜单项目,注意不要遗漏...