【问题标题】:Is there a way to render SVG favicons in unsupported browsers?有没有办法在不受支持的浏览器中呈现 SVG 图标?
【发布时间】:2015-07-24 21:49:56
【问题描述】:

截至目前,似乎支持它们的唯一浏览器是 Firefox。显然 Opera 曾经支持它,但后来放弃了它。也许是 JavaScript 垫片?

【问题讨论】:

    标签: svg favicon


    【解决方案1】:

    重用来自How do I set an SVG element to my page's favicon?的过程中与序列化无关的部分:

    1. 创建<canvas> 元素(以下简称canvasElement)。
    2. 创建一个<img> 元素(以下称为imageElement)并将其href 设置为您的SVG 图标。
    3. 一旦图像被加载(通过在设置href后检查元素的complete属性,如果是则直接调用以下步骤,如果不是则将它们添加为load事件的侦听器),设置与canvasElement.width = imageElement.widthcanvasElement.height = imageElement.height 匹配的画布尺寸)。
    4. 使用canvasElement.getContext('2d')(以下简称ctx)为画布创建绘图上下文。
    5. 使用ctx.drawImage(imageElement, 0, 0, canvasElement.width, canvasElement.height) 将图像(在设置ctx.globalCompositeOperation = "copy" 之后,尤其是在重新使用canvas 元素时)绘制到画布上。
    6. 使用canvasElement.toDataURL() 从画布创建一个PNG DataURL,并将that 设置为HTML 中<link rel="icon"> 元素的href 属性。

    【讨论】:

    • 请注意,所有现代浏览器都遵循 HTML 生活标准中描述的图像加载行为,在load 事件触发之前不应设置complete 属性:请参阅the original answer预期行为符合规范的重写版本。
    【解决方案2】:

    我不知道有任何垫片。不幸的是,我认为没有任何方法会起作用,因为网站图标显示在浏览器用户界面中,而不是网站本身。不过,我相信浏览器的支持情况终于开始好转。截至目前,Firefox 中的 SVG 图标仅在第一个页面加载时加载,然后回退到 .png.ico 图标(如果有)。 The upcoming Safari 9 also has partial support,为新的“固定标签”功能使用单色 SVG 图标 - 但这需要 SVG 完全黑色,包含非官方的 mask 属性,如果您愿意,可以定义一个单一颜色的整体图标应使用(不相关的)<meta name="theme-color"> 标签着色。 Firefox seems to be working on a fix (更新:在 Firefox 41 中修复),所有其他浏览器都有一个功能请求站点,用于实现 SVG 图标(EdgeChromeWebkit/Safari)。

    现在,除了指定<link rel="icon" sizes="any" href="favicon.svg" type="image/svg+xml">,您还应该继续指定.png 和/或.ico 图标。

    【讨论】:

    • 我找到了一些东西——也许this 可以帮忙?它将 SVG 转换为 <canvas>,然后转换为 PNG。
    • 现在最好还是继续使用 SVG 和 PNG。我希望更多的浏览器开始支持 SVG 图标,看看不同浏览器使用了多少不同的尺寸。有没有办法强制 Firefox 使用 SVG 而不是 PNG? SVG 文件要小得多,我更希望 Firefox 等支持浏览器会使用它而不是 PNG。
    • @Brandon 我完全同意——例如,请务必对Edge UserVoice site 进行投票。 Firefox 似乎使用指定的最后一个 favicon(有些也使用列表中的第一个 - 这真是一团糟),所以我将我的 <link rel=icon href=favicon.svg> 作为我的最后一个 <link rel=icon>,这就是 Firefox 41+ 中出现的那个(不过,我不知道后台加载了什么)。干杯!
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2011-11-02
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多