【问题标题】:Custom fonts not displaying within IE9 & IE10自定义字体不在 IE9 和 IE10 中显示
【发布时间】:2013-12-23 21:36:15
【问题描述】:

我在以下位置使用自定义字体时遇到了多个问题:

我昨天在使用 Mozilla Firefox 时遇到了一个问题,它没有显示我链接到我们的 AWS S3 存储桶的自定义字体,我通过托管我们实际 Web 服务器的字体解决了这个问题。现在,我遇到了 IE9/10 的问题,字体不再显示。我在这里找到了以下讨论:IE9 Refusing to Load custom font? 这有点触及我的问题,但是,我没有运行 Apache 或 nginx 设置,我在 IIS 上(没有实际的 IIS 访问权限)。

这是 CSS 代码:

/* GOBOLD */
@font-face {
    font-family: 'Gobold';
    src: url('www.shawmut.com/happyholidays/fonts/Gobold.eot');
    src: url('www.shawmut.com/happyholidays/fonts/Gobold.eot#iefix') format('embedded-opentype'),
         url('www.shawmut.com/happyholidays/fonts/Gobold.eot?') format('eot'),
         url('www.shawmut.com/happyholidays/fonts/Gobold.woff') format('woff'),
         url('www.shawmut.com/happyholidays/fonts/Gobold.ttf') format('truetype'),
         url('www.shawmut.com/happyholidays/fonts/Gobold.svg#Gobold') format('svg');
    font-weight: normal;
    font-style: normal;
}

/* MOTION PICTURE */
@font-face {
    font-family: 'MotionPicture';
    src: url('www.shawmut.com/happyholidays/fonts/MotionPicture.eot');
    src: url('www.shawmut.com/happyholidays/fonts/MotionPicture.eot#iefix') format('embedded-opentype'),
         url('www.shawmut.com/happyholidays/fonts/MotionPicture.eot?') format('eot'),
         url('www.shawmut.com/happyholidays/fonts/MotionPicture.woff') format('woff'),
         url('www.shawmut.com/happyholidays/fonts/MotionPicture.ttf') format('truetype'),
         url('www.shawmut.com/happyholidays/fonts/MotionPicture.svg#MotionPicture') format('svg');
    font-weight: normal;
    font-style: normal;
}

有人可以帮我解决这个问题吗,这让我发疯了! :)

【问题讨论】:

  • 更正,这只发生在 IE10 环境中。

标签: iis internet-explorer-9 font-face internet-explorer-10 webfonts


【解决方案1】:

我们尝试了所有建议的解决方案并花费数小时研究为什么我们的某些网站用户无法在 IE9 中加载带有图标的自定义字体 - 只是发现是 IE9 中的安全设置阻止了字体文件正在加载。

转到 Internet 选项 > 安全 > Internet > 中解决了该问题,所有自定义图标都已加载并且看起来很完美,就像在最现代的浏览器中一样。

请注意,我们不使用 Windows,我们只使用它在 Mac 上通过 Parallels 进行测试,但我希望它至少可以为你们中的一些人节省一些时间。

【讨论】:

    【解决方案2】:

    我在使用自定义字体时遇到过类似的问题,我设置的其中一件事是出站 URL 重写规则,以便在请求字体时,服务器会添加一个 CORS 标头。这似乎已经解决了我的问题,所以值得一试。

    您需要在您的网络服务器 (http://www.iis.net/downloads/microsoft/url-rewrite) 上安装 URL Rewrite 才能使其工作。

    <configuration>
        <system.webServer>
            <rewrite>
                <outboundRules>
                    <rule name="Fonts CORS">
                        <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
                        <conditions>
                            <add input="{REQUEST_URI}" pattern=".*\.(ttf|otf|eot|woff|svg)\?*.*$" />
                        </conditions>
                        <action type="Rewrite" value="*"/>
                  </rule>
                </outboundRules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    【讨论】:

    • 我已经提交了一份关于我的客户网络托管服务提供商的服务器配置的支持票。我会及时通知您结果,感谢您的回复!
    • 看来这个解决方案实际上解决了分发 woff 字体的错误。感谢您的帮助!
    • 很高兴解决了您的问题!
    【解决方案3】:

    CORS

    从使用相对路径开始,当有人使用非 www 前缀 URL 访问您的网站时,您会遇到问题,因为某些浏览器由于跨源资源限制而不会加载您的字体。

    当然,这可以通过发送适当的标头来解决,但在这里坚持相对路径是更明智的选择。

    另见https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

    内容类型

    确保您的服务器发送正确的 Content-Type 标头,浏览器可能对此很挑剔。

    .ttf  > application/octet-stream
         or application/x-font-ttf
         or application/x-font-truetype
    
    .eot  > application/vnd.ms-fontobject
    
    .woff > application/font-woff
    
    .svg  > note sure, probably image/svg+xml
    

    缺少文件

    还有一些文件不可用,特别是.woff.svg 的,所以如果.eot 不能使用(周围有很多EOT 字体不符合微软标准,通常由字体转换器生成)没有可用的后备。

    开发者工具

    如果上述方法不能解决问题,请检查开发人员工具中的网络和控制台选项卡,如果字体文件确实没有被加载/使用,它们可能会为您提供线索。

    【讨论】:

    • 我意识到即使我的 .WOFF 路径是正确的,它仍然会出现 404 错误。我删除了绝对路径并恢复为相对路径,这似乎解决了我的 IE10/Mozilla 问题。你知道为什么我的 .woff 路径会产生 404 吗?
    • @JoeyO'Driscoll 我对 IIS 不是很熟悉,但如果我没记错的话,它会为未知的 MIME 类型触发 404,在这种情况下应该有更多的日志信息,另请参阅 @987654322 @
    • 谢谢!我向他们的网络托管服务提供商开放了一张支持票,希望他们能尽快更新 CORS 标头以验证字体类型扩展。谢谢!
    • 刚刚解决了所有问题。即使汤姆霍尔推荐了“大局”解决方案,我也会对你的回答投赞成票。谢谢!
    • @JoeyO'Driscoll 你确定只是标题配置使服务器实际服务于.woffsvg 文件吗?正如我所说,我不熟悉 IIS,但这对我来说听起来有点奇怪......
    猜你喜欢
    • 2013-11-29
    • 2012-07-16
    • 2015-08-08
    • 1970-01-01
    • 2015-04-15
    • 2017-11-06
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多