刷新后,字体真棒图标在IE中变得不可见

时间:2014-10-30 04:24:53

标签: font-awesome

我正面临着IE浏览器的问题。它正在加载第一次加载的图标。但如果我刷新页面,图标将不可见。你能告诉我如何从服务器端解决这个问题吗?这与Font-awesome disappears after refresh for all ie browsers ie11,ie10,ie9有关。但它没有完整的解决方案

5 个答案:

答案 0 :(得分:4)

我们遇到了同样的问题,因为我们在本地存储了FA CSS文件。字体@import在刷新时会失败,可能是因为它执行的HTTP调用与本地文件的调用不同。我们恢复了他们的CDN,它解决了这个问题。如果您下载了FA文件但没有通过CDN将其拉入,请将<link>中的<head>标记更改为:

<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">

一旦我们这样做,FontAwesome就会在每次刷新时都没有问题。

答案 1 :(得分:2)

在我的情况下,我使用的是java,唯一有效的是我制作的缓存过滤器。

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("*")
public class CacheFilter implements Filter {

    /**
     * @constructor CacheFilter
     * @date 28/09/2015
     */
    public CacheFilter() {
        //construtor
    }

    /* (non-Javadoc)
     * @see javax.servlet.Filter#destroy()
     */
    @Override
    public void destroy() {
        //metodo vazio
    }

    /* (non-Javadoc)
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String page = httpRequest.getRequestURI();

        if (!page.contains("fontawesome-webfont") || !page.endsWith(".eot")){
          httpResponse.setHeader("Expires", "-1"); 
          httpResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0"); 
          httpResponse.setHeader("Pragma", "no-cache"); 
        }else if(page.contains("fontawesome-webfont") && page.endsWith(".eot")){
            httpResponse.setHeader("Expires", "-1"); 
            httpResponse.setHeader("Cache-Control", "public");
            httpResponse.setHeader("Pragma", "cache");
        }

        chain.doFilter(request, response);
    }

    /* (non-Javadoc)
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    @Override
    public void init(FilterConfig fConfig) throws ServletException {
        //metodo vazio
    }

}

答案 2 :(得分:1)

CV Harris 提供的建议工作正常。但是,我们不想使用CDN中的文件。

对于我们来说,将Spring Security升级到4.2.3后会出现图标问题。因此,如Spring security configuration中所述,在spring配置中添加了以下内容。

  

默认-禁用= “真”

现在图标显示在IE11中。

答案 3 :(得分:0)

我做了与https://stackoverflow.com/a/37196841/1982385相同的事情,除了我在反向代理(HAProxy)而不是servlet本身上做了。

backend app
    server server1 10.10.14.4:9090 check
    acl is_woff capture.req.uri -m sub .woff
    acl is_ttf capture.req.uri -m sub .ttf
    acl is_eot capture.req.uri -m sub .eot
    http-response set-header Cache-Control public if is_eot or is_woff or is_ttf
    http-response set-header Expires -1 if is_eot or is_woff or is_ttf
    http-response set-header Pragma cache if is_eot or is_woff or is_ttf

答案 4 :(得分:0)

我知道...个老问题...但仍然有意义。我遇到了同样的问题...使用CDN可行,但是我自己没有托管FA CSS。

事实证明,这与其他人建议的缓存有关。我已经关闭了以下BeginRequest方法中的所有内容的缓存(由于某种原因,现在使我逃脱了……可能对其他问题进行故障排除),但是似乎FA确实想要缓存... /耸肩。

    protected void Application_BeginRequest()
    {
        Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }

在刷新时注释掉了固定的FA图标,尽管我现在的任务是使其更加细腻...