5

正如我的问题标题已经告诉我在强制 IE8 不使用兼容模式时遇到问题。

我在网上找到了两个解决方案,一个来自Michael Gollmick,将这段代码添加到 beforeRenderResponse:

if (context.getUserAgent().isIE()) {
    var response = facesContext.getExternalContext().getResponse();
    response.setHeader("X-UA-Compatible", "IE=8");
}

此解决方案工作正常浏览器中的兼容模式按钮消失,页面看起来应该。乙

ut 我不想将此代码添加到每个 XPage,所以我尝试了 Per Henrik Lausten的解决方案,将 MetaData 添加到我的主题:

<resources>
  <metaData>
    <httpEquiv>X-UA-Compatible</httpEquiv>
    <content>IE=8</content>
  </metaData>
</resources>

但似乎 Theme 中的这个 MetaData 没有效果。在查看 HTML 源代码时,我在源代码的标题中发现了 Meta 标记,但 IE8 似乎只是忽略了它。

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

那么我怎样才能让主题中的元数据工作呢?或者可能有任何其他解决方案自动将 onRenderResponse 代码添加到每个 XPage。

4

3 回答 3

7

您可以使用 PhaseListener 或 Theme 来做到这一点。使用主题时,您可以在 XPage 中使用不需要的 styleClass 并计算值:

<control>
    <name>ViewRoot</name>
    <property>
        <name>styleClass</name>
        <value>#{javascript:
            var response = facesContext.getExternalContext().getResponse();
            response.setHeader("X-UA-Compatible", "IE=8");
        }</value> 
    </property>
</control>

PhaseListener 看起来像这样:

package ch.hasselba.xpages.jsf;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletResponse;

public class IEPhaseListener implements PhaseListener {

    private static final long serialVersionUID = 1L;

    public void afterPhase(PhaseEvent event) {
    }

    public void beforePhase(PhaseEvent event) {
        HttpServletResponse response = (HttpServletResponse) event
                .getFacesContext().getExternalContext().getResponse();
        response.setHeader("X-UA-Compatible", "IE=8");

    }

    public PhaseId getPhaseId() {
        return PhaseId.RENDER_RESPONSE;
    }

}
于 2013-07-31T11:29:33.387 回答
0

如果您有一个所有 XPage 都使用的自定义控件,则将 beforeRenderResponse 代码添加到该控件。例如,您可能有一个用于页面布局的自定义控件。

于 2013-07-31T06:41:39.420 回答
0

我遇到了同样的问题,但是在主题中使用 Sven 的代码也不起作用。不管顺序如何,当我在主题中添加 X-UA-Compatible 标记和一个 favIcon 时,在 HTML 输出中,favIcon 在标题之后首先列出。删除 favIcon 解决了这个问题。

于 2015-05-12T16:51:11.490 回答