当前位置: 首页 > 面试题库 >

@ font-face字体只能在自己的域上工作

慕容康安
2023-03-14
问题内容

我正在尝试创建一种字体库以供在我的网站上使用,这样我就可以在CSS中调用库中的任何字体,而无需进行任何其他设置。为此,我创建了一个子域,在其中将每种字体的文件夹放置在存储库中,其中包含每种字体的各种文件类型。我还在子域的根目录上放置了一个名为font-
face.css的css文件,并在其中填充@font-face了每种字体的声明,这些字体通过绝对链接进行链接,以便可以在任何地方使用它们。

我的问题是,似乎只能在字体所在的子域上使用字体,而在其他站点上则无法显示该字体。使用firebug,我确定font-
face.css文件已成功链接并加载。那么为什么字体无法正确加载?字体文件有保护吗?我使用了应该允许使用的所有字体,所以我不明白为什么会这样。也许这是一个Apache问题,但是当我链接到该字体时,我可以下载该字体。

哦,为了澄清一下,我没有通过设置此设置来侵犯任何版权,我正在使用的所有字体都被许可使用以允许这种事情。但是,我想建立一种方法,只有我可以访问此字体库,但这是另一个项目。


问题答案:

这是因为Firefox(从您提到的Firebug来看)认为跨域(甚至子域)Web字体嵌入是一个坏主意。

您可以说服它从子域加载字体,方法是将其添加到提供字体的子域的顶级.htaccess文件中(已更新,以适应HTML5
Boilerplate中
同一文件的代码):

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

针对此:

但是,我想建立一种方法,只有我可以访问此字体库,但这是另一个项目。

在为W3C规范Access-Control-Allow-Origin并没有再多说什么了比任何一个通配符"*"或一个特定的域。到目前为止,我已经找到了建议对标题进行验证的SO答案Origin,但是我认为这是仅Firefox的标题。我不确定其他浏览器(它们甚至不需要.htaccess上面的技巧就可以使用跨域Web字体)。



 类似资料:
  • @font-face跟其在CSS中作用表现一样,在后面简单地添加个块状属性即可,类似下面: @font-face font-family Geo font-style normal src url(fonts/geo_sans_light/GensansLight.ttf) .ingeo font-family Geo 生成为: @font-face { font-famil

  • 我试着为我的网站设置一个自定义字体,但它在火狐,Chrome或Edge/IE上都不起作用。Firefox开发者工具中的网络部分说没有找到字体,并列出了404,尽管URL应该是正确的。这是我的代码: null

  • 问题内容: 是否可以在页面加载之前预加载或以其他方式缓存@ font-face字体(最有可能使用javascript),以便在页面最终加载时不会出现难看的跳转? 问题答案: 我目前尚无任何避免字体加载时出现闪烁的技术,但是您可以通过为字体发送适当的缓存头并确保该请求尽快通过来最大程度地减少闪烁。

  • 问题内容: 我将字体和CSS托管在pagodabox.com服务器上,并在shopify上开发商店部分。我想使用来自pagodabox托管网站的相同样式表作为shopify网站。但是我的字体没有加载到Firefox 13.0.1版中 FF或我的语法有问题吗?谢谢!!! 问题答案: 您不能在Firefox中使用@ font-face,而将字体托管在其他域中如果要使用绝对URL为@ font- fac

  • 我在用一个工具自动生成CSS,它生成下面的@font-face标签和对应的段落Style 注意,指定的字体已经是Garamond字体的斜体版本,从技术上来说,< code>font-style:italic行是多余的。 然而,这并不奏效(我在FF、Chrome 所以,我有2个问题 > 为什么这不起作用,也就是说,为什么使用会导致它不起作用? 有没有办法通过javascript“覆盖”@font f

  • 这是一个愚蠢的问题,我想有一个简单的解决办法。我在Wordpress主题中使用web字体--我正在工作的站点有两个域,可以用来访问同一个站点。 在我的CSS中,我使用了font-squirrel格式来声明字体: 当我转到其中一个域时,这工作很好,但是当我通过另一个域转到站点时,字体无法加载,因为它被认为是“跨站点”请求。基本上,当我访问domain1.com时,请求如下所示:http://www.