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

在IE CSS上,仅当通过内部链接导航时,字体才有效

吕英豪
2023-03-14
问题内容

我们的网页设计人员创建了一个具有以下字体的CSS:

@font-face {
    font-family: 'oxygenregular';
    src: url('oxygen-regular-webfont.eot');
    src: url('oxygen-regular-webfont.eot?#iefix') format('embedded-opentype'),
         url('oxygen-regular-webfont.woff') format('woff'),
         url('oxygen-regular-webfont.ttf') format('truetype'),
         url('oxygen-regular-webfont.svg#oxygenregular') format('svg');
    font-weight: normal;
    font-style: normal;
}

它在IE和Firefix上运行良好。但是有一个问题:在IE上,只有当我使用内部网页链接导航页面时,字体才能正确呈现。如果我单击刷新或返回按钮,则字体将替换为默认字体(Times
New Roman)。

当前,该网站正在使用HTTPS,但是在使用HTTP时会观察到相同的问题。

当我使用内部网站链接导航时,在IE Developer工具的“网络”选项卡(Shift-F12)中,我看到以下内容:

/Content/oxygen-regular-webfont.eot?    GET 200 application/vnd.ms-fontobject

当我使用“刷新/返回”按钮时,其他字体也有两个条目:

/Content/oxygen-regular-webfont.woff    GET 200 application/x-font-woff
/Content/oxygen-regular-webfont.ttf GET 200 application/octet-stream

CSS文件本身通过以下方式加载:

/Content/site.css   GET 200 text/css

我试图同时删除woff和ttf,所以有以下内容:

@font-face {
    font-family: 'oxygenregular';
    src: url('oxygen-regular-webfont.eot');
    src: url('oxygen-regular-webfont.eot?#iefix') format('embedded-opentype');
    font-weight: normal;
    font-style: normal;
}

但是IE仍然具有相同的行为方式(除非它不再下载woff和ttf):在浏览“后退/刷新”时显示不正确的后备字体。

如何使IE在刷新/返回操作上加载正确的字体?


问题答案:

我找到了一个解决方案,但是我看不到它起作用的原因(嗯,只有一个原因-这是IE:D)。

我所做的就是将同一站点放在Apache上并再次进行测试。在Apache上,即使使用“刷新”按钮,字体也可以正常工作。然后在网络检查器中,我看到Apache为eot文件返回的是304,而不是200,这让我很震惊-
因此这是缓存问题。我去了我的ASP.NET应用程序,并且肯定地确定了-出于安全原因(也为了避免缓存AJAX请求),有人禁用了您可以想象的所有缓存:

        // prevent caching for security reasons
        HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(false);
        HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
        HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
        HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        HttpContext.Current.Response.Cache.SetNoServerCaching();

        // do not use any of the following two - they break CSS fonts on IE
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        HttpContext.Current.Response.Cache.SetNoStore();

我注释掉最后两行代码后,字体突然开始在IE上正常工作。因此,我猜答案是:如果未缓存IE,则无法加载字体。我不知道为什么只有在刷新/导航时才出现问题。

编辑-替代解决方案

而不是评论最后两行

    // do not use any of the following two - they break CSS fonts on IE

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.Cache.SetNoStore();

更改SetAllowResponseInBrowserHistorytrue代替:

HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);


 类似资料:
  • 我试图根据连接表中的条件从用户表中选择一行,仅当连接表中存在一条记录时。如果记录不存在,我想返回该行。我只想在存在INNER JOIN记录且contact_blocked时不返回该行!=1。 通过下面的语句,我实现了当用户记录存在且联系人的值为0时我想要的结果。那一排被退回。当联系人被阻止时,不会返回任何内容。没关系。然而,另外,当内部连接记录还不存在时,我仍然希望与用户一起返回该行,因为它们尚未

  • 当我从deeplink(用户点击URL)打开应用程序并按下后退按钮时,我希望用户导航到我导航图中的前一个片段,但它只是退出应用程序。 文件中说,反向导航的工作方式应该与用户自然到达屏幕的方式相同。 我可以在导航图中指定所需的backbackback吗?或者可以在deeplink后自动形成Backback?对于旧版本的库,我发现在按back press键后,它应该导航到导航图的根目录,但事实并非如此

  • 有没有什么内容只能显示插槽的方法 例如,我正在构建一个简单的<code>卡。vue组件,并且我只希望在页脚槽包含内容时显示页脚: 在视图中: 由于上面的组件不包含页脚,因此不应该呈现它,但它是。 我尝试过使用,但这返回未定义。 有人有什么提示吗?

  • 问题内容: 是否可以通过内联CSS加载外部字体? 注意:我 不是 在谈论使用带有定义的外部CSS文件,而是类似以下内容: 问题答案: 是否可以使用内嵌CSS加载外部字体?不适用于外部CSS文件[....]。 是的,您可以按照Stephen Scaff的本文中的文章所示对base64字体进行编码,然后将其放到页面的块中,以避免外部请求。 也可以按照您所描述的浏览器是否支持的方式使用此技术。 每个现代

  • 问题内容: 在single.php循环中,我有一个select标记,其中的选项是通过自定义查询返回的当前类别的帖子。 在更改选定的选项时,我有许多javascript函数运行良好,但是其中的最后一个函数()似乎不起作用。 此功能的目的是在不重新加载页面的情况下更新下一个和上一个链接。 以下是模板中导航链接(上一个和下一个)的代码: 此函数的javascript代码为: 文件内容为: 通过为p参数赋

  • 问题内容: 这只是给我最后一个字符(数字),但我需要整个数字字符串 结果:3 期望值:123 这给了我相同的结果,但是我需要它返回一个空白值: 结果:3 期望: 注意:Postgres 7.4 有用的链接:http : //www.postgresql.org/docs/7.4/static/functions- matching.html 更新: 两者现在都返回:123 仍然需要跳过或返回以下字