在触摸栏中显示带有浏览器图标的Chrome标签列表

时间:2019-08-12 17:40:03

标签: google-chrome applescript macbookpro-touch-bar

我正在使用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

当前结果:enter image description here


编辑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的新手,所以我可能遗漏了一些非常明显的东西。

1 个答案:

答案 0 :(得分:0)

只要已将浏览器设置为允许它响应AppleScript事件并允许其在其浏览器选项卡中运行JavaScript,就可以使用少量JavaScript来检索网页的收藏夹图标。

在Chrome的特定窗口 tab y 中,对特定标签 window x 的引用,此代码相当可靠在将URL返回到网站的网站图标时

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蒙版应用)。遗憾的是,不会有一个 perfect 搜索参数始终返回100%准确的图像链接-即使隔离指向一个名为"favicon.ico"的文件的URL也只能可靠地返回约占所有情况的一半,因为网站可以根据需要命名其图标。