【问题标题】:Font awesome icons becomes invisible in IE after refresh刷新后字体真棒图标在 IE 中变得不可见
【发布时间】:2014-12-26 00:35:42
【问题描述】:

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

【问题讨论】:

  • 您必须发布演示问题的代码。另外,其他解决方案有什么不完整的地方?

标签: font-awesome


【解决方案1】:

我知道......老问题......但仍然相关。我有同样的问题......使用 CDN 有效,但我自己没有托管 FA css。

事实证明,正如其他人所建议的那样,它与缓存有关。我已经在下面的 BeginRequest 方法中关闭了所有内容的缓存(出于某种原因,现在我无法理解...可能正在排除其他问题),但似乎 FA 真的很想被缓存.../耸肩。

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

在刷新时将这个固定的 FA 图标注释掉,不过我现在的任务是让它更细粒度...

【讨论】:

    【解决方案2】:

    CV Harris 提供的建议运行良好。但是,我们不想使用 CDN 中的文件。

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

    defaults-disable="true"

    现在图标在 IE11 中显示。

    【讨论】:

      【解决方案3】:

      我做了与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】:

        就我而言,我使用的是 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
            }
        
        }
        

        【讨论】:

          【解决方案5】:

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

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

          一旦我们这样做了,FontAwesome 就会在每次刷新时毫无问题地提供。

          【讨论】:

          • 这并不是一个完整的答案。有谁知道实际的问题是什么? IE 不喜欢 CSS 的本地副本是什么?我遇到了这个问题,但我必须在本地托管文件以限制项目。
          • 导致此问题的问题在此答案中有更详细的描述:stackoverflow.com/a/32628649
          猜你喜欢
          • 2017-06-22
          • 2014-05-05
          • 1970-01-01
          • 2018-09-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-10
          • 2014-01-16
          相关资源
          最近更新 更多