创建用于在Safari中更改样式表的快捷方式

时间:2018-08-21 03:14:50

标签: css safari applescript keyboard-shortcuts

Safari没有内置的“深色主题”或夜间模式扩展程序(如Chrome),因此当我需要在黑暗的房间里做作业(室友睡觉时)时,它确实很痛苦。幸运的是,Safari可以优先更改其默认CSS工作表。所以我写了一些东西,

`* { 颜色:rgb(176,176,176)!important;

背景:#000000!重要; }

a:link { 颜色:rgb(99,202,67)!重要; }`

通常效果很好,但是特别是在不是文本材料的情况下,我需要反复切换样式表。

所以我想知道如何创建用于切换样式表的快捷方式?
使用 AppleScript 怎么样?

1 个答案:

答案 0 :(得分:-1)

我在各种应用程序中有很多设置,可以定期在两种状态之间切换,并使用AppleScript自动执行任务。我个人尽量不要使用UI脚本,因为它可能会出现问题,但是,在您的特定情况下,我相信使用AppleScript的UI脚本解决方案将是如何实现它。

也就是说,如果Safari已关闭,则在通过UI时对〜/ Library / Preferences / com.apple.Safari.plist文件所做的更改也可能使用defaults命令完成,并且然后打开Safari。但是,我假设您希望能够在Safari打开的情况下即时进行此更改,而不必关闭/重新打开即可完成任务,因此无需进行UI脚本编写。

我将您问题中的代码保存为MyStyleSheet.css。

然后,我手动进行以下操作:将其设置为样式表:Safari>首选项...>高级>样式表:

完成此操作后,我将其设置回“ None Selected”,然后编写了此AppleScript脚本:

示例AppleScript代码:

if not running of application "Safari" then
    display dialog "Safari is not open." buttons {"OK"} default button "OK"
    return
end if

tell application "Safari" to activate
delay 0.5
tell application "System Events"
    tell application process "Safari"
        click menu bar item "Safari" of menu bar 1
        click menu item "Preferences…" of menu 1 of menu bar item "Safari" of menu bar 1
        click UI element "Advanced" of toolbar 1 of window 1
    end tell
    tell group 1 of group 1 of window "Advanced" of application process "Safari"
        set currentStyleSheet to (value of pop up button 1)
        click pop up button 1
        if currentStyleSheet contains "None Selected" then
            click menu item "MyStyleSheet" of menu 1 of pop up button 1
        else
            click menu item "None Selected" of menu 1 of pop up button 1
        end if
    end tell
    click button 1 of window "Advanced" of application process "Safari"
end tell

我将上面的示例AppleScript代码保存为名为Toggle Safari样式表的AppleScript应用程序,并测试了它是否可以正常工作。请注意,更改样式表后,关闭Safari首选项可能会有时间延迟。滞后时间取决于打开Safari窗口的方式以及系统上同时发生的其他活动。无论是手动进行更改还是使用AppleScript进行更改,延迟都是相同的。


请注意,示例AppleScript代码就是这样,它旨在显示完成给定任务的方法。用户有责任根据需要添加任何适当的错误处理,并根据需要添加其他delay命令。