如何使用 Chromium Embedded Framework 获取 favicon 网站?我可以查看源代码并获取图标的 url,但是有些网站,例如 Facebook,不使用标准程序添加图标,那么,我如何获取图标?谢谢。
4 回答
favicon 的规则都在Wikipedia页面上进行了解释。
该标准在文档部分中使用带有 rel 属性的链接元素
<head>
来指定文件格式、文件名和可以为任何网站目录指定的位置。
您需要在元素内部查看<head>
这种link
形式的元素:
<link rel="shortcut icon" href="http://example.com/myicon.ico" />
或者
<link rel="icon" type="image/vnd.microsoft.icon"
href="http://example.com/image.ico" />
如果您没有找到此类链接,则使用favicon.ico
在根目录中查找的回退。
我不确定你为什么认为 Facebook 不遵循标准。我刚刚查看了一个包含以下内容的 FB 页面:
<link rel="shortcut icon"
href="http://static.ak.fbcdn.net/rsrc.php/yP/r/Ivn-CVe5TGK.ico" />
网站不可能使用其他机制将网站图标获取到浏览器。浏览器遵循明确定义的获取网站图标的规则。如果网站做了不同的事情,浏览器将找不到该网站图标。
从这个博客条目,跨浏览器支持的网站图标的最佳实践是包括
<link rel="icon" type="image/vnd.microsoft.icon" href="http://www.example.com/image.ico"> <!-- For good browsers. -->
<link rel="SHORTCUT ICON" href="http://www.example.com/image.ico"/> <!-- For Internet Explorer-->
第一个链接是真正的浏览器,第二个是垃圾。在某些网站上,您会type="image/x-icon"
在link
标签中看到。曾几何时,这是正确的实现,但image/x-icon
现在已被取代,现在已image/vnd.microsoft.icon
成为 MIME 类型的 IANA 标准的一部分。
顺便说一句,旧版本的 ie 只是寻找一个/favicon.ico
硬编码的文件名。如果您想要超级安全,您应该将您的网站图标命名为favicon.ico
. 当然,如果您的域为不同目的托管多个网站,这对您没有帮助。
注意:如果您不需要支持 IE 的 favicon,那么您可以自由地为您的 favicon 使用 png、gif 和 jpg 格式,如下所示...
<link rel="icon" type="image/png" href="http://www.example.com/image.png">
<link rel="icon" type="image/gif" href="http://www.example.com/image.gif">
<link rel="icon" type="image/jpeg" href="http://www.example.com/image.jpg">
CEF1 有一个名为的回调OnFaviconURLChange
,每当页面的 favicon URL 更改时都会调用该回调。根据CEF 问题跟踪器中的这个错误, CEF3 还不支持此回调。
您需要实现一个客户端处理程序和至少 CefDisplayHandler。此类具有 OnFaviconURLChange(不确定出现在哪个版本中,但肯定存在于分支 2357 及更高版本中)。C++原型是:
void OnFaviconURLChange(CefRefPtr<CefBrowser> browser,
const std::vector<CefString>& icon_urls);
icon_urls 通常包含一个条目(如果有),它是网站图标的 URL。
还要考虑检查 favicon URL 的安全性,我将 URL 传递给 HTMLayout 应用程序只是发现它位于自签名 https:// 资源上,并且各种 wininet 安全错误(例如 InternetErrorDlg)开始抛出所有的地方.