使用JS获取网站的favicon

时间:2010-01-13 15:10:27

标签: javascript favicon

我想知道是否可以通过JavaScript的网址获取网站的网站图标。

例如,我有一个网址http://www.bbc.co.uk/,我希望获得<link rel="icon" .../>元标记中描述的网站图标的路径 - http://www.bbc.co.uk/favicon.ico

我有很多网址,因此我不应该加载每个网页并搜索link代码。

有什么想法吗?

5 个答案:

答案 0 :(得分:50)

这里有两个工作选项,我测试了超过100个网址,每个选项都得到了不同的结果。 请注意,此解决方案不是JS,但可能不需要JS

<!-- Free --> 
<img height="16" width="16" src='http://www.google.com/s2/favicons?domain=www.edocuments.co.uk' />
<!-- Paid -->
<img height="16" width="16" src='http://grabicon.com/edocuments.co.uk' />

答案 1 :(得分:21)

突然间,我发现了一个名为Google Shared Stuff的东西,它通过主机名返回带有网站首选图标的图像:

http://www.google.com/s2/favicons?domain=www.domain.com

但是对于BBC网站来说,它返回的图标有点小。比较:

http://www.google.com/s2/favicons?domain=www.bbc.co.uk
http://www.bbc.co.uk/favicon.ico

答案 2 :(得分:15)

您可以使用YQL

http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D"http://bbc.co.uk/"and%20xpath%3D"/html/head/link[@rel%3D'icon']%20|%20/html/head/link[@rel%3D'ICON']%20|%20/html/head/link[@rel%3D'shortcut%20icon']%20|%20/html/head/link[@rel%3D'SHORTCUT%20ICON']"&format=json&callback=grab

Display Feed Favicons Greasemonkey script使用此查询。

您可以在YQL控制台中编写查询,但需要登录(顺便说一下,不使用查询):

http://developer.yahoo.com/yql/console/#h=select%20*%20from%20html%20where%20url%3D%22http%3A//bbc.co.uk/%22and%20xpath%3D%22/html/head/link%5B@rel%3D%27icon%27%5D%20%7C%20/html/head/link%5B@rel%3D%27ICON%27%5D%20%7C%20/html/head/link%5B@rel%3D%27shortcut%20icon%27%5D%20%7C%20/html/head/link%5B@rel%3D%27SHORTCUT%20ICON%27%5D%22

如果存在favicon,则优于http://www.google.com/s2/favicons?domain=www.domain.com ,但不在domain.com/favicon.ico中

答案 3 :(得分:0)

免责声明:我自己制作了此服务,但您可以尝试http://grabicon.com。这是一个非常简单的用于处理调整大小和重新格式化的图标的API。它还使用了许多主动缓存来提高速度。像大多数其他此类服务一样,您可以将其直接插入HTML中,并且效果很好。我还没有在线文档,但这里有一些使用每个人最喜欢的网站的例子:

获取PNG格式的图标:

http://grabicon.com/icon?domain=microsoft.com

调整为64像素的正方形:

http://grabicon.com/icon?domain=microsoft.com&size=64

这会使用人们可以实现的各种方法搜索图标,并使用可用的最高分辨率版本,因为favicon.ico文件实际上包含集合图标。它使用该版本调整大小以适应您的偏好,除非已经有完美的匹配。

让我知道你们的想法,以及你们可能会喜欢的其他功能!

<强>更新

Grabicon现在又回来了,它不会去任何地方。它最初是为后来决定不支持它的客户而构建的。但现在它在我的直接照顾下,具有更好的速度和调整大小的能力。

答案 4 :(得分:0)

最近我认为 GitHub 的服务比 Google 的服务做得好得多:

https://favicons.githubusercontent.com/microsoft.com

虽然看起来都不是完美的。 对于计算器溢出:

对于 GitHub:

这是一个关于可以从多个来源获取网站图标的解决方案的article I wrote

这是源代码:

<!DOCTYPE html>
<html>
<body style="background-color:grey;">
<script type="text/javascript">

const KRequestFaviconGitHub = 'https://favicons.githubusercontent.com/';
const KRequestFaviconGoogle = 'https://www.google.com/s2/favicons?domain=';

const KDefaultUrl = KRequestFaviconGoogle;

// We rely on pre-defined hostname configurations
const hostnames = {
    "stackoverflow.com": { url:KRequestFaviconGoogle+"stackoverflow.com", invert:0 },
    "theregister.co.uk": { url:KRequestFaviconGoogle+"theregister.co.uk", invert:1 },
    "github.com": { url:KRequestFaviconGitHub+"github.com", invert:1 },
    "android.googlesource.com": { url:KRequestFaviconGoogle+"googlesource.com", invert:0 },
    "developer.android.com": { url:KRequestFaviconGitHub+"developer.android.com", invert:0 }
};

document.addEventListener('DOMContentLoaded', function(event) {

    addFavicon("stackoverflow.com");
    addFavicon("bbc.co.uk");
    addFavicon("github.com");
    addFavicon("theregister.co.uk");
    addFavicon("developer.android.com");
    addFavicon("android-doc.github.io");
    addFavicon("slions.net");
    addFavicon("alternate.de");
    addFavicon("amazon.de");
    addFavicon("microsoft.com");
    addFavicon("apple.com");
    addFavicon("googlesource.com");
    addFavicon("android.googlesource.com");
    addFavicon("firebase.google.com");
    addFavicon("play.google.com");
    addFavicon("google.com");
    addFavicon("team-mediaportal.com");
    addFavicon("caseking.de");
    addFavicon("developer.mozilla.org");
    addFavicon("theguardian.com");
    addFavicon("niche-beauty.com");
    addFavicon("octobre-editions.com");
    addFavicon("dw.com");
    addFavicon("douglas.com");
    addFavicon("douglas.de");
    addFavicon("www.sncf.fr");
    addFavicon("paris.fr");
    addFavicon("bahn.de");
    addFavicon("hopfully.that.domain.does.not.exists.nowaythisisavaliddomain.fart");

});

/**
*
*/
function addFavicon(aDomain)
{
    var a = document.createElement("a");
    a.href = "http://" + aDomain;
    //a.style.display = "block";
    var div = document.createElement("div");
    div.innerText = aDomain;
    div.style.verticalAlign = "middle";
    div.style.display = "inline-block";
    var img = document.createElement("img");
    img.className = "link-favicon";
    img.style.width = "16px";
    img.style.height = "16px";
    img.style.verticalAlign = "middle";
    img.style.display = "inline-block";
    img.style.marginRight = "4px";
    a.prepend(img);
    a.appendChild(div);
    document.body.appendChild(a);
    document.body.appendChild(document.createElement("p"));

    const conf = hostnames[aDomain]
    if (conf==null)
    {
        img.src = KDefaultUrl+aDomain;
    }
    else
    {
        img.src = conf.url;
        img.style.filter = "invert(" + conf.invert + ")";
    }
}
</script>
</body>
</html>