如何使用Chromium Embedded Framework获取favicon网站?我可以查看源代码并获取图标的URL,但有些网站(如Facebook)不使用标准程序添加图标,那么,我如何获得图标?感谢。
答案 0 :(得分:4)
favicon的规则都在Wikipedia页面上解释。
标准在文档的
<head>
部分使用带有rel属性的link元素来指定文件格式,文件名和可以为任何网站目录指定位置。
您需要在<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" />
网站不可能使用其他机制来获取浏览器的优惠。浏览器遵循明确定义的获取favicon的规则。如果网站做了不同的事情,浏览器将找不到图标。
答案 1 :(得分:3)
从这个blog entry开始,跨浏览器支持的favicons的最佳做法是包括
<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命名为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">
答案 2 :(得分:1)
CEF1有一个名为OnFaviconURLChange
的回调,只要页面的favicon URL发生变化,就会调用该回调。根据CEF问题跟踪器中的this bug,CEF3还不支持此回调。
答案 3 :(得分:0)
您需要实现客户端处理程序和至少CefDisplayHandler。这个类有OnFaviconURLChange(不确定在哪个版本中出现,但肯定存在于分支2357及更高版本中)。 C ++原型是:
void OnFaviconURLChange(CefRefPtr<CefBrowser> browser,
const std::vector<CefString>& icon_urls);
icon_urls通常包含一个条目(如果有),这是favicon的URL。
考虑还检查favicon URL的安全性,我将URL传递给HTMLayout应用程序,仅发现自签名的https://资源,并且各种wininet安全错误(例如InternetErrorDlg)开始抛出所有地方