在最新的稳定版Firefox(版本57)(称为Quantum)中,用户控制的新标签上的“热门网站”功能已更改。以前,无论网站如何,仅显示部分屏幕截图的粗略缩略图,并且无法控制。现在,某些网站带有一个大图标,而其他网站仅显示为上述缩略图,并且其图标被覆盖在角落。获得大图标处理的示例站点:Amazon,TechCrunch,Slack和GitHub。通过网站图标处理获得缩略图的示例站点:Slashdot,Steam,Kongregate,Gizmodo。
据我所知,这没有什么特别的押韵或原因。我还没有在“热门站点”功能的任何地方找到任何文档。
深入研究Firefox源代码一段时间后,我发现browser\extensions\activity-stream\lib\TopSitesFeed.jsm
,其中包含以下代码部分:
/**
* Get an image for the link preferring tippy top, rich favicon, screenshots.
*/
async _fetchIcon(link) {
// Check for tippy top icon and rich icon.
this._tippyTopProvider.processSite(link);
let hasTippyTop = !!link.tippyTopIcon;
let hasRichIcon = link.favicon && link.faviconSize >= MIN_FAVICON_SIZE;
if (!hasTippyTop && !hasRichIcon) {
this._requestRichIcon(link.url);
}
// Request a screenshot if needed.
if (!hasTippyTop && !hasRichIcon && !link.screenshot) {
const {url} = link;
await Screenshots.maybeCacheScreenshot(link, url, "screenshot",
screenshot => this.store.dispatch(ac.BroadcastToContent({
data: {screenshot, url},
type: at.SCREENSHOT_UPDATED
})));
}
}
先前MIN_FAVICON_SIZE
定义为96,我假设以像素为单位。
看一下TippyTop
,我看到对Amazon,Reddit,Twitter,Facebook和其他一些网站(resource://activity-stream/data/content/tippytop/
在Firefox内部访问相关的JSON文件和图像)进行了一些优惠,我想这意味着Firefox包含带有最终二进制文件的特殊图标,特定网站,但不是我提到的所有网站。
例如,TechCrunch不在TippyTop列表中,仅具有16x16的图标。但是,Firefox显示图标而不是屏幕截图。TechCrunch网站上的Apple触摸图标超过了96像素。因此,也许其中之一正在被使用。我通常认为网站图标是与Apple特定的触摸图标元标记分开的实体。这意味着网站管理员可以(以某种方式)覆盖屏幕截图获取机制,并仅在“热门网站”列表中显示一个漂亮的图标。因此,问题仍然在于如何实现这一目标?此时的图标图标逻辑仍然有些神秘。