网页的linke rel="icon"详解 favicon深究
字词转换是中文维基的一项自动转换,目的是通过计算机程序自动消除繁简、地区词等不同用字模式的差异,以达到阅读方便。字词转换包括全局转换和手动转换,本说明所使用的标题转换和全文转换技术,都属于手动转换。
如果您想对我们的字词转换系统提出一些改进建议,或者提交应用面更广的转换(中文维基百科全站乃至MediaWiki软件),或者报告转换系统的错误,请前往Wikipedia:字词转换请求或候选发表您的意见。
Favicon是favorites icon的缩写,亦被称为website icon(网页图标)、page icon(页面图标)或urlicon(URL图标)。Favicon是与某个网站或网页相关联的图标。网站设计者可以多种方式创建这种图标,而目前也有很多网页浏览器支持此功能。浏览器可以将favicon显示于浏览器的地址栏中,也可置于书签列表的网站名前,还可以放在标签式浏览界面中的页标题前。
最初,定义一个favicon的方法是将一个名为“favicon.ico”的文件置于Web服务器的根目录下,Internet Explorer的收藏夹(即书签)可以自动显示该文件。后来出现了一种更为灵活的方法,即使用HTML来为任何一个网页指示其图标所存储的位置。这种方法是通过在页面的<head>部分添加两个link组件来实现的。这样,任何一个适当大小的(16×16像素或更大)的图像都可以用作favicon。尽管如此,多数情况下仍然使用ICO格式。其他网页浏览器现在也支持PNG(便携式网络图片)格式,和GIF(图形交换格式)动画图像格式。
市面上多数浏览器同时支持上述两种方法。正因此,网络服务器要接受很多对“favicon.ico”文件的请求,即使该文件根本不存在。网站管理员对此很不满,因为这样会增加大量的服务器日志(Server log)项,并导致很多不必要的磁盘读取和CPU、网络资源的占用。另一个常见的问题是,当清除浏览器的缓存后,favicon可能会消失。
Internet Explorer最早仅仅将favicon用于收藏夹(例如MSIE 6.0)。这产生了一些关于隐私问题的考虑,因为网站拥有者可以通过检查访问日志察看有多少人下载了favicon.ico文件,判断有多少人将他们的网站放入收藏夹中。然而,自从新版本的Internet Explorer(例如MSIE 7.0)出现,以及很多其他浏览器开始在每次访问时都将favicon显示在地址栏上,这就不再是一个问题了。
过去,为保证favicon出现,网站设计者和开发者采用了多种方法。很难明确地保证favicon可以在所有电脑上显示,即使是用同一版本的一种浏览器。
下列代码另一个局限就是它把favicon关联到了某个特定的HTML或XHTML文档上。为避免这一点,favicon.ico文件应置于根目录下。多数浏览器将自动检测并使用它。
建议包含以下两行HTML代码:
<linkrel="shortcut icon"href="http://example.com/favicon.ico"type="image/vnd.microsoft.icon">
<linkrel="icon"href="http://example.com/favicon.ico"type="image/vnd.microsoft.icon">
然而,只有第一行是必须的,因为“shortcut icon”字符串将被多数遵守标准的浏览器识别为列出可能的关键词(“shortcut”将被忽略,而仅适用“icon”);而Internet Explorer将会把它作为一个单独的名称(“shortcut icon”)。这样做的结果是所有浏览器都可以理解此代码。只有当希望为新浏览器提供另一种备用图像(例如动画GIF)时,才有必要添加第二行。
(1)在HTML中,link组件必须在head组件里(在<head>和</head>之间)。
(2)对于XHTML,link必须使用“ />”结束(或“></link>”),而不可以使用“>”结束。
(3) href可以,但不必指向/favicon.ico的位置。它可以指向任何URL。
(4)图像通常可以使用任何被浏览器支持的图像格式。
(5) .ico文件格式通常可以被所有可以显示favicon的浏览器读取。
设置服务器,以发送正确的MIME标识:
(1)ICO 文件 image/vnd.microsoft.icon(或者亦可出于兼容性原因使用image/x-icon。然而最好使用
IANA注册的MIME类型,因为多数主流浏览器现在支持它)
(2)GIF 文件 image/gif
(3)PNG 文件 image/png使用适当的分辨率和色深。
(4)ICO:包括多种分辨率(最常使用的是16×16和32×32,Mac OS X有时使用64×64和128×128)以及位深(比特每
像素)(多数使用4、8、24 bpp,即16、256和1600万色)。
(5)GIF:使用16×16,256色。PNG:使用16×16,256色或24位。
注意:当favicon.ico被置于文档根目录时,将会被一些不处理link组件的浏览器找到,即使没有您的站点上没有指向它的链
接。
标准化
Favicon功能最早由微软创设,而微软公司的Internet Explorer网页浏览器会对每一个网站都请求favicon。微软支持的link标签不遵从World Wide Web Consortium(W3C,万维网联盟)的HTML建议[1],因为:
(1)rel属性必须包含一个用空格作分隔符的link类型的列表,所以一个包含两词的link类型不能被遵守标准的浏览器理
解。
(2)“.ico”文件类型(一种用于MicrosoftWindows上图标的光栅格式)没有一个注册的MIME类型,而且似乎在当时也
不能被多数浏览器理解。然而2003年,这一格式在IANA获得注册,其MIME类型是image/vnd.microsoft.icon,进
而消除了此问题的第一部分。
(3)在网站上使用保留地址(reserved location)与Architecture of the World Wide Web(互联网的结构)矛盾,同时
被认为是link squatting(链接劫持)或URI squatting(URI劫持)。
Mozilla浏览器通过一种遵从Web标准的方法添加了对favicon的支持。它采用rel="icon"并允许网络设计人员添加任何支持的图像格式的favicon。例如<link rel="icon" type="image/png" href="/path/image.png">。后来鉴于此功能将被用于所有新内容,多数浏览器都对此功能增加了支持。
根据《HTML 4.01 Specification W3C Recommendation 24 December 1999》,rel属性的取值仅有:
Alternate Stylesheet Start Next Prev Contents Index Glossary
Copyright Chapter Section Subsection Appendix Help Bookmark
如果要采用其他值,应当在head标签中的profile属性中进行自定义。W3C给出了一个建议:《How to Add a Favicon to your Site》。
简单地说:
在head标签中添加profile属性指向http://www.w3.org/2005/10/profile。用link标签指向Favicon URI,rel值为icon
一个常见的错误是不指定profile。
对于标签的格式
HTML:
<link rel="icon" type="image/vnd.microsoft.icon" href="http://example.com/image.ico">
<link rel="icon" type="image/gif" href="http://example.com/image.gif">
<link rel="icon" type="image/png" href="http://example.com/image.png">
XHTML:
<link rel="icon" type="image/vnd.microsoft.icon" href="/somepath/image.ico" />
<link rel="icon" type="image/gif" href="/somepath/image.gif" />
<link rel="icon" type="image/png" href="/somepath/image.png" />
【注意事项】
由于iPhone,iPod Touch以及一些Android系统的触屏智能手机的出现,开始出现了一种新的icon用法
<link rel="apple-touch-icon" href='xx.png'>
<link rel="apple-touch-icon-precomposed" href='xx.png'>
这个图标的用途是用于在将网页保存到主屏幕时,显示的相应图标
相关的介绍:http://phonydev.com/apple-touch-icon/
http://allinthehead.com/retro/319/how-to-set-an-apple-touch-icon-for-any-site
后来在omif发现的问题。
<link rel="shortcut icon" href="<%= PUBLIC_URL %>assets/favicon.ico"> <link rel="icon" type="image/png" sizes="16x16" href="<%= PUBLIC_URL %>assets/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="32x32" href="<%= PUBLIC_URL %>assets/favicon-32x32.png"> <link rel="apple-touch-icon" sizes="57x57" href="<%= PUBLIC_URL %>assets/apple-touch-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="<%= PUBLIC_URL %>assets/apple-touch-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="<%= PUBLIC_URL %>assets/apple-touch-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="<%= PUBLIC_URL %>assets/apple-touch-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="<%= PUBLIC_URL %>assets/apple-touch-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="<%= PUBLIC_URL %>assets/apple-touch-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="<%= PUBLIC_URL %>assets/apple-touch-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="<%= PUBLIC_URL %>assets/apple-touch-icon-152x152.png"> <link rel="apple-touch-icon" sizes="167x167" href="<%= PUBLIC_URL %>assets/apple-touch-icon-167x167.png"> <link rel="apple-touch-icon" sizes="180x180" href="<%= PUBLIC_URL %>assets/apple-touch-icon-180x180.png"> <link rel="apple-touch-icon" sizes="1024x1024" href="<%= PUBLIC_URL %>assets/apple-touch-icon-1024x1024.png"> <link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-320x460.png"> <link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-640x920.png"> <link rel="apple-touch-startup-image" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-640x1096.png"> <link rel="apple-touch-startup-image" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-750x1294.png"> <link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1182x2208.png"> <link rel="apple-touch-startup-image" media="(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1242x2148.png"> <link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-748x1024.png"> <link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-768x1004.png"> <link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1496x2048.png"> <link rel="apple-touch-startup-image" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)" href="<%= PUBLIC_URL %>assets/apple-touch-startup-image-1536x2008.png"> <link rel="icon" type="image/png" sizes="228x228" href="<%= PUBLIC_URL %>assets/coast-228x228.png"> <link rel="yandex-tableau-widget" href="<%= PUBLIC_URL %>assets/yandex-browser-manifest.json">