编写Safari URL的脚本

在我的Safari的初步审查,我抱怨它缺乏可编程性结果是批评有点误导 - Safari实际上是相当可编写的。

在首次查看Safari脚本词典后,让我失望的是它不支持标准的Web浏览器Apple事件命令,例如的OpenURL要么的GetURL(这两个IE的脚本字典都支持)Safari确实支持标准和文本套件,也称为Safari套件。

在当前的测试版中,Safari套件只包含一个条目:a文献object,包含有用的属性,如网址资源我们用过资源几天前的房产用于在BBEdit中查看源代码的脚本

在IE中,您只需使用OpenURL命令加载URL:

tell application "Internet Explorer"
    openURL "http://www.example.com/"
end tell

Safari的等效代码使用网址属性:

tell application "Safari"
    make new document at end of documents
    set url of document 1 to "http://www.example.com/"
end tell

我不确定为什么“在文件的最后“部分是必要的,但如果没有它,脚本将无法工作简单地说“它肯定会更容易,语法更明显”制作新文件“,但如果您尝试这样做,则在运行脚本时会出错(还有一个相当无益的错误,就是:“发生了类型6的错误。”)这个“在文件的最后” detritus seems to be necessary when creating new document windows via AppleScript in any Cocoa application; you need to do the same thing when making a new window in TextEdit, for example像这样不直观的多余语法,加上无用的错误信息,是AppleScript因难以编写而闻名的原因。

对于没有人应该感到惊讶的是,我在BBEdit中完成了所有的火球写作当我插入超链接时,我经常在浏览器窗口中打开即将链接的URL要从浏览器获取URL到我的BBEdit文档,我必须:

  1. 切换到浏览器。
  2. 切换到浏览器中的相应窗口。
  3. 在位置字段中选择URL。
  4. 复制。
  5. 切换回BBEdit。
  6. 糊。

So why not use AppleScript to make this process shorter? What follows is an AppleScript intended to be called from within BBEdit (save it in the Scripts folder in your BBEdit Support folder)调用时,它会显示一个对话框,列出Safari中当前打开的每个URL选择所需的URL,然后单击“插入”按钮将该URL插入最前面的BBEdit窗口。

正在运行的脚本的屏幕截图。
[图1]

从Safari插入URL

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

tell application "BBEdit"
    set the_url to choose from list url_list ¬
        with prompt ¬
        "Insert URL from Safari window:" OK button name "Insert"
    if the_url is not false then
        set selection of text window 1 to the_url
    end if
end tell

这是它的工作原理。

首先,我们创造URL_LIST,一个列表,用于保存Safari中每个打开的文档窗口的URL。

然后我们告诉BBEdit显示一个列表框对话框该从列表中选择命令是标准添加脚本添加的一部分它将列表作为参数,并返回一个字符串,其中包含所选列表元素的值,我们将其存储在名为的变量中THE_URL在我们使用之前THE_URL但是,我们需要检查它的值是否为,如果用户单击“取消”按钮,则会出现这种情况。

关于这个脚本,Safari没有什么独特之处通过一些小的改动,我们可以有一个适用于IE的版本(在Mac OS 9和Mac OS X上):

从IE插入URL

set url_list to {}

tell application "Internet Explorer"
    set window_list to ListWindows
    repeat with w in window_list
        set r to GetWindowInfo w
        copy item 1 of r to end of url_list
    end repeat
end tell

tell application "BBEdit"
    set the_url to choose from list url_list ¬
        with prompt ¬
        "Insert URL from IE window:" OK button name "Insert"
    if the_url is not false then
        set selection of text window 1 to the_url
    end if
end tell