保存和还原Safari URL

可编写脚本的应用程序软件的全部意义在于它允许我们(用户)添加和调整功能通过花时间预先制作应用程序脚本,开发人员可以使用(相对)简单的脚本,允许用户自行添加新功能,从而节省时间。

例如,我长期以来一直对Web浏览器无法记住上次退出时打开哪些URL感到恼火我通常在任何给定时刻打开六个左右的Web浏览器窗口,打开我将来读取的URL。

打开所有这些窗口让我不愿意退出浏览器我不想退出,因为我需要做一些事情来记住我还没有读完的开放URL我不想给它们添加书签 - 这样就太过分了这些是我想要阅读的网址,然后关闭These aren’t URLs I want to remember forever; if I were to bookmark them, I’d need to clean them out of my bookmark list later, after reading them更不用说在一步中为所有打开的窗口添加书签并不容易。

我们可以用AppleScript解决这个问题我用Apple的Mac OS X系统级脚本菜单,所以我将这些脚本保存在主目录“Library”文件夹的“Scripts”文件夹中(实际上,我救了他们的“狩猎”文件夹里的脚本文件夹,分组在一起的子菜单的主要脚本菜单。)

第一个脚本,我们将其命名为“保存Safari URL”,将执行以下操作:

  1. 创建一个每个Safari文档的url列表窗口。
  2. 列表写一个文本文件命名文件夹“Safari保存url”偏好每行一个URL覆盖文件的先前内容 - 我们只想记住现在打开的URL。

我们将第二个脚本命名为“Restore Safari URL”它会:

  1. 阅读Preferences文件夹中的“Safari Saved URLs”文本文件。
  2. 创建URL列表。
  3. 告诉Safari打开列表中的每个URL。

在我们处理它的同时,我们将创建第三个脚本“Clear Safari URL”,它将简单地删除“Safari Saved URL”文件的内容。

保存Safari URL

tell application "Safari"
    set url_list to URL of every document
end tell

-- convert url_list to text
set old_delim to AppleScript's text item delimiters
set AppleScript's text item delimiters to return
set url_list to url_list as text
set AppleScript's text item delimiters to old_delim

-- get path to prefs file where URLs will be stored
set prefs_folder to path to preferences folder as string
set prefs_file to prefs_folder & "Safari Saved URLs"

try
    set open_file to ¬
        open for access file prefs_file with write permission
    -- erase current contents of file:
    set eof of open_file to 0
    write url_list to open_file starting at eof
    close access open_file
on error
    try
        close access file prefs_file
    end try
end try

它是如何工作的:

首先,我们创造URL_LIST,每个Safari文档的URL列表接下来,我们要转换URL_LIST从一个文本的AppleScript列表我们想要的文本,因为我们要写一个简单的文本文件的列表当您告诉AppleScript将列表转换为文本时,它会使用名为的全局AppleScript属性分隔列表项文本项分隔符的默认值文本项分隔符“”,空字符串(实际上,要迂腐,默认值是{ " }, a list with one value, the empty string.) This means that by default, when you convert a list to text, the list items are concatenated together with no separators如果这是你的清单:

{“一二三”}

converting it to text with the default delimiter will yield:

一二三

我们希望将URL写入文本文件,每行一个URL所以,我们要设置AppleScript分隔符的文本条目返回返回is an AppleScript keyword to represent the \r character.) After doing so, converting the list above to text would yield:

one
two
three

但是,因为文本项分隔符是计算机上所有AppleScripts共享的全局AppleScript属性,正确的做法是保存当前值,更改文本项分隔符我们想要的,然后恢复当我们结束的前一个值。

接下来,我们创建一个字符串,其中包含首选项文件的路径,我们将在其中存储URL然后我们将URL写入文件通过设置文件EOF(文件结束)为零,我们正在删除文件的任何现有内容In other words, when this script runs, it overwrites any existing URLs in the file; it does not append整件事情都包裹着试一试阻止,如果我们捕获任何错误,我们仍然会在脚本退出之前关闭该文件。

恢复Safari URL

-- get path to prefs file where URLs are stored
set prefs_folder to path to preferences folder as string
set prefs_file to prefs_folder & "Safari Saved URLs"

try
    set open_file to ¬
        open for access file prefs_file without write permission
    set url_list to read open_file using delimiter return
    close access open_file
    tell application "Safari"
        repeat with the_url in url_list
            open location the_url
        end repeat
    end tell
on error
    try
        close access file prefs_file
    end try
end try

这个非常简单,特别是一旦你理解了“保存Safari URL”脚本的工作方式。

首先,我们创建一个指向我们的首选项文件的字符串然后我们打开文件我们将文件的内容读入变量URL_LIST使用分隔符返回part告诉AppleScript将文件内容作为列表提供给我们返回作为每个项目的分隔符换句话说,文件的每一行作为单独的列表项。

如果成功,我们遍历列表,并告诉Safari打开每个URL我们放了Safari告诉阻止在试一试阻止,因为如果成功读取了prefs文件,我们只希望它运行。

清除Safari网址

display dialog ¬
    "Clear stored Safari URL list?" buttons {"Cancel", "Clear"} ¬
    default button 2 with icon note

if button returned of result is "Clear" then
    -- get path to prefs file where URLs will be stored
    set prefs_folder to path to preferences folder as string
    set prefs_file to prefs_folder & "Safari Saved URLs"
    
    try
        set open_file to ¬
            open for access file prefs_file with write permission
        -- erase current contents of file:
        set eof of open_file to 0
        close access open_file
    on error
        try
            close access file prefs_file
        end try
    end try
end if

这很简单打开首选项文件集EOF为零关闭文件prefs文件现在为空这样的破坏性的东西,我们要求确认,弹出一个对话框明确命名的按钮有助于保持良好的状态,清晰的