0

我正在使用 BetterTouchTool 自定义 MacBook Pro 上的触摸栏。到目前为止,我已经使用下面的脚本来显示在 Chrome 中打开的选项卡列表。我想在页面名称旁边显示网站图标。

if application "Google Chrome" is running then
    tell application "Google Chrome"
        try
            set windowCount to number of windows
            repeat with x from 1 to windowCount
                set maxSize to 15
                set tabcount to number of tabs in window x
                repeat with y from 1 to tabcount
                    set tabName to title of tab 1 of window x
                    if length of tabName is greater than maxSize then
                        set tabName to text 1 thru (maxSize - 3) of tabName & "..."
                    end if
                    return tabName
                end repeat
            end repeat
        on error
            return ""
        end try
    end tell
else
    return ""
end if

当前结果:在此处输入图像描述


编辑1(答案后的新脚本)

if application "Google Chrome" is running then
    tell application "Google Chrome"

        set windowCount to number of windows
        repeat with x from 1 to windowCount
            set maxSize to 15
            set tabcount to number of tabs in window x
            repeat with y from 1 to tabcount
                set tabName to title of tab 1 of window x
                if length of tabName is greater than maxSize then
                    set tabName to text 1 thru (maxSize - 3) of tabName & "..."
                end if
                set tabIcon to execute of tab 1 of window x javascript ¬
                    "document.head.querySelector('link[rel~=icon]').href;"
                return "{\"text\":\"" & (tabName) & "\",                                                 
\"icon_data\": \"base64_icon_data\",                                                 
\"icon_path\":\"" & (tabIcon) & "\",                                                 
\"background_color\": \"255,85,100,255\",                                                 
\"font_color\": \"100,200,100,255\",                                                 
\"font_size\": 10}"
            end repeat
        end repeat

    end tell
else
    return ""
end if

由于我是 Applescript 的新手,因此我可能遗漏了一些非常明显的东西。

4

1 回答 1

0

您可以使用一些 JavaScript 检索网页的图标,前提是您已将浏览器设置为允许它响应 AppleScript 事件,并允许它在其浏览器选项卡中运行 JavaScript。

给定对 Chrometab y的特定窗口 中的特定选项卡 的引用window x,此代码在将 URL 返回到网站的 favicon 时相当可靠:

tell application id "com.google.Chrome"
    execute in tab y of window x javascript ¬ 
        "document.head.querySelector('link[rel~=icon]').href;"
end tell

它在网页的源文档中挑选出第一个<link>标签,该标签具有一个名为的属性rel,其值包含单词"icon"。然后它检索href属性的值。在大多数情况下,这应该足够了。例如,这个 StackOverflow 网页包含以下元素:

<link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d">

上面的 AppleScript 返回 URL:

https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d

链接到此图像:

会有奇怪的网站,尴尬地使用这个词"icon"来引用网站图标以外的东西;或者使用一系列合成图像文件将一个图像覆盖在另一个图像上,这将导致 AppleScript 只返回图标的一个组件(在 GitHub 的情况下,它的图标文件只是一个黑色方块,而图标的细节通过叠加的 SVG 蒙版应用)。可悲的是,不会有一个完美的搜索参数总是会返回 100% 准确的图像链接——即使隔离指向一个名为的文件的 URL,也"favicon.ico"只会在大约一半的情况下可靠地返回,因为网站可以将其命名为随心所欲地图标。

于 2019-08-13T08:16:21.010 回答