寻找favicons - 当不在默认位置时

时间:2011-12-17 16:02:49

标签: javascript html favicon

我在我的页面上显示其他网站的图标。

他们在这里的时间大约有一半:

hostname.com/favicon.ico

但另一半他们不是。对于我自己网站中的ecample,我链接到我的.ico文件。 FAVICON只是路径的PHP定义。

<link rel="SHORTCUT ICON" href="<?php echo FAVICON ?>" />

如何使用html中的链接获取网站的网站图标的网址?

这是site sais你可以像这样进行Google搜索,你输入你需要的网站。

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

这是一个解决方案,但似乎效率低于仅从路径中读取html。

我认为谷歌将“所有”图标缓存为.png格式并使其可搜索 -

按此site

2 个答案:

答案 0 :(得分:3)

使用Ajax和代理页面加载页面。对于Ajax:

// Create a request object:
var rq = new XMLHttpRequest(); // Not IE6-compatible, by the way.

// Set up the request:
rq.open('GET', 'proxy.php?url=' + encodeURIComponent(thePageURL), true);

// Handle when it's loaded:
rq.onreadystatechange = function() {
    if(rq.readyState === 4) {
        // The request is complete:
        if(rq.status < 400) {
            // The HTML is stored in rq.responseText; you could use a regular expression to extract the favicon, like /shortcut icon.+?href="(.+?)"/i.
        } else {
            // There was an error fetching the page; fall back?
        }
    }
};

代理页面(你可能想要添加一些安全性):

<?php
echo file_get_contents($_REQUEST['url']);
?>

谷歌“Ajax”,你会发现很多关于如何做这类事情的信息。

您需要代理页面的原因是浏览器不允许来自JavaScript的Ajax请求跨域,除非目标允许它,它必须明确地执行。这是出于安全原因,因为JavaScript可能会恶意冒充用户。因此,您使用服务器端脚本代理内容并避免此类问题。

答案 1 :(得分:2)

解析HTML很讨厌 - 您可能想要使用像http://www.controlstyle.com/articles/programming/text/php-favicon/这样的库,或者让Google为您执行此操作:http://www.google.com/s2/favicons?domain=domain(效率更高 - 您无需解析所有HTML在您的服务器上,它只是一个标签)。如果您想在服务器上使用Google的功能,请查看上面的链接。