正如我的问题标题已经告诉我有问题迫使IE8不使用兼容模式。
我在网上发现了两个来自Michael Gollmick的解决方案,并将此代码添加到beforeRenderResponse:
if (context.getUserAgent().isIE()) {
var response = facesContext.getExternalContext().getResponse();
response.setHeader("X-UA-Compatible", "IE=8");
}
此解决方案可以正常使用浏览器中的兼容模式按钮,并且页面看起来应该如此。乙
我不想将此代码添加到每个XPage中,所以我尝试了来自Per Henrik Lausten的解决方案将MetaData添加到我的主题:
<resources>
<metaData>
<httpEquiv>X-UA-Compatible</httpEquiv>
<content>IE=8</content>
</metaData>
</resources>
但似乎主题中的这个MetaData没有效果。在查看HTML源代码时,我在sourceCode的标题中找到了Meta标记,但IE8似乎只是忽略它。
<meta content="IE=8" http-equiv="X-UA-Compatible">
那么如何从主题中获取MetaData呢?或maby任何其他自动解决方案将onRenderResponse代码添加到每个XPage。
答案 0 :(得分:7)
您可以使用PhaseListener或主题执行此操作。使用主题时你可以f.e.使用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;
}
}
答案 1 :(得分:0)
如果您拥有所有XPage使用的自定义控件,请将beforeRenderResponse代码添加到该控件。例如,您可能拥有页面布局的自定义控件。
答案 2 :(得分:0)
我遇到了同样的问题,但在主题中使用Sven的代码也没有用。无论订单是什么,当我在主题中添加X-UA-Compatible标签和favIcon时,favicon首先列在HTML输出中的标题之后。删除favIcon解决了这个问题。