IE9阻止跨网站字体的下载

这让我疯狂。

只是在IE9上testing一个网站,发现“实时”版本正在渲染一个networking字体,我使用的比dev版本要小。

这里是一个屏幕抓取的select:

在这里输入图像描述

我正在使用Font Squirrel @ font-face工具包。 正如你所看到的,在查看本地版本的网站时,Firefox,Chrome甚至IE9都可以。

本地和现场版本之间唯一的区别在于,字体是从实际站点的不同域加载的(我已经正确设置了跨域策略,正如在Firefox和Chrome上运行的那样)。

我不记得它在IE8中的样子(微软,再一次,没有想到开发者,并安装了IE9的顶部IE9,没有select同时运行它们)

该网站在http://enplanner.com,所以你可以查看来源。

任何帮助,将不胜感激 – 先谢谢你。

编辑:我已经删除IE9,发现在IE8本地和现场看起来完全一样。 看来IE8拥有比IE9更接近FF / Chrome的优越渲染引擎。 这是一个相当郁闷的发现。

IE9支持.WOFF; IE8不支持,只支持.EOT字体。

打开IE9 F12开发人员工具,您会看到以下消息:

CSS3117: @font-face failed cross-origin request. Resource access is restricted. Neuton-webfont.woff CSS3117: @font-face failed cross-origin request. Resource access is restricted. YanoneKaffeesatz-Regular-webfont.woff CSS3114: @font-face failed OpenType embedding permission check. Permission must be Installable. Neuton-webfont.ttf CSS3114: @font-face failed OpenType embedding permission check. Permission must be Installable. YanoneKaffeesatz-Regular-webfont.ttf 

检查您的HTTP标头,很明显,您的跨域访问configuration不正确,因为您的WOFF文件没有Access-Control-Allow-Origin响应标头。 他们也提供了错误的MIMEtypes( text/plain ),虽然这不会导致你的问题。 但是,将woff映射到正确的MIMEtypes失败可能会导致问题,因为某些服务器不会为具有“未定义”扩展名的文件提供服务,而是返回HTTP/404错误。

好的,这是什么工作。 将以下部分放置在您的Apacheconfiguration中,供您使用以下字体的主机使用:

 <FilesMatch "\.(ttf|otf|eot|woff)$"> <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "http://mydomain.com" </IfModule> </FilesMatch> 

将“mydomain.com”replace为您自己的域名或* (但要小心使用*因为这意味着任何人都可以使用您的CDN)

'| woff'是我忘记的东西。 卫生署!

对于IIS添加下面的行….就像一个魅力


 <system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE,OPTIONS" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> </customHeaders> </httpProtocol> </system.webServer> 

关于以上的意思,我想补充一下。 我们遇到同样的问题,我们search了Google Web Font的function。 所以,我们把我们的htaccess,这个:

标题集Access-Control-Allow-Origin“*”

而不是我们的域名。 如果像谷歌那样,asterisc一直在运转。

检查是否可以在IE中打开该文件(your-web.com/your-font.woff),如果您收到错误404转到IIS,双击“MIMEtypes”configuration选项,同时select在IIS根节点左侧面板,然后单击右侧“动作”面板中的“添加…”链接。 这将popup以下对话框。 添加。 woff文件扩展名,并指定“ application / x-font-woff ”作为相应的MIMEtypes。

我在这个网站( Robòticaeducativa )使用这个指令,我转换我的原始.ttf字体( http://www.font2web.com/

我find了一个解决方法。 将此添加到htaccess。

 BrowserMatch MSIE best-standards-support Header set X-UA-Compatible IE=8 env=best-standards-support 

使用Access-Control-Allow-Origin标题的另一种解决scheme是使用data:将字体embedded到CSS中。

不要忘记包含.svg – 在某些情况下这可能是必要的。 添加它解决了IE 11中的问题

 <FilesMatch "\.(eot|otf|svg|woff|ttf)$"> <IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule> </FilesMatch> 

要在ASP.Net中实现,你可以使用这个语法

 Response.AppendHeader("Access-Control-Allow-Origin", "*"); 

还值得注意的是,如果您的资产托pipe在Amazon AWS S3上,那么您将无法设置服务器发送的标头。 相反,您将需要根据以下说明configuration存储桶上的CORS设置:

我尝试了一切,从修改我的Apacheconfiguration和.htaccess文件没有运气。 在IE开发工具中,我偶然发现了“文档模式”,默认是IE7。 所以经过一些研究,我发现这个meta标签:

 <meta http-equiv="X-UA-Compatible" content="IE=9"> 

现在IE 10和9正确格式化我的网站,并正确显示所有的字体真棒图标。

希望有帮助…

没有testing!
Nginx的站点文件位,只允许来源访问字体文件,如果您的CDN不公开的话:-)快乐的编码

 location ~ \.(ttf|otf|eot|woff)$ { Access-Control-Allow-Origin: * } 

在控制台(F12)中注意到这个错误之后: @font-face failed cross-origin request. Resource access is restricted @font-face failed cross-origin request. Resource access is restricted我发现我的浏览器(IE11,仿真:IE9)“ 封锁了内容,以帮助保护我的隐私 ”。 通过解锁内容 – 点击url旁边的标志 – 它应该像它应该。