如何通过AppleScript仅在Safari菜单栏选项勾选时取消勾选
问题根源
Safari视图菜单下的控制项分为两类,原有逻辑没有判断当前状态就直接点击,才会出现重复运行脚本反向触发的问题:
- 普通栏控制项(状态栏/收藏栏/标签栏):文本会随状态动态切换,对应栏显示时菜单项为「Hide XX」,隐藏后菜单项变为「Show XX」
- 全屏工具栏控制项:文本固定,点击仅切换勾选状态,勾选时全屏始终显示工具栏,未勾选时全屏自动隐藏工具栏
你提到的系统偏好设置修改方案不生效,是因为Safari当前版本的权限限制,不允许非UI脚本直接修改工具栏显示配置,模拟点击的UI脚本方案兼容性最高。
修复后的脚本
tell application "Safari" to activate tell application "System Events" tell process "Safari" set viewMenu to menu "View" of menu bar 1 -- 隐藏状态栏:仅当当前处于显示状态时点击 if menu item "Hide Status Bar" of viewMenu exists then click menu item "Hide Status Bar" of viewMenu end if -- 隐藏收藏栏:仅当当前处于显示状态时点击 if menu item "Hide Favorites Bar" of viewMenu exists then click menu item "Hide Favorites Bar" of viewMenu end if -- 隐藏标签栏:仅当当前处于显示状态时点击 if menu item "Hide Tab Bar" of viewMenu exists then click menu item "Hide Tab Bar" of viewMenu end if -- 关闭全屏始终显示工具栏:仅当当前已勾选时点击 set fullscreenToolbarItem to menu item "Always Show Toolbar in Full Screen" of viewMenu if fullscreenToolbarItem exists then -- 判断菜单项是否有勾选标记 if value of attribute "AXMenuItemMarkChar" of fullscreenToolbarItem is not missing value then click fullscreenToolbarItem end if end if end tell end tell
注意事项
- 运行前需要给执行脚本的应用(比如「脚本编辑器」、快捷指令或你用来跑脚本的其他工具)开启辅助功能权限,路径为:系统设置→隐私与安全性→辅助功能,找到对应应用勾选开关即可。
- 如果你的Safari是中文界面,把代码里对应的英文菜单项文本替换为中文即可,比如
"Hide Status Bar"替换为"隐藏状态栏","Always Show Toolbar in Full Screen"替换为"始终在全屏显示工具栏"。
内容的提问来源于stack exchange,提问作者IceGod
相关产品推荐
相关产品推荐

