Pregunta Forzar IE8 para que no use el modo de compatibilidad, utilizando MetaData en el tema que no funciona


Como mi pregunta Título ya dice, tengo problemas para forzar al IE8 a no usar el modo de compatibilidad.

Encontré dos soluciones en la web una de Michael Gollmick, el cual agrega este Código a la beforeRenderResponse:

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

Esta solución funciona bien, el botón de modo de compatibilidad en el navegador desaparece y la página parece que debería. segundo

Pero no quiero agregar este Código a cada XPage, así que probé la solución de Per Henrik Lausten para agregar MetaData a mi tema:

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

Pero parece que este MetaData en el Tema no tiene efecto. Cuando miré el código fuente HTML, encontré la etiqueta Meta en el encabezado del código fuente, pero IE8 parece ignorarlo.

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

Entonces, ¿cómo puedo hacer que los metadatos del tema funcionen? O maby cualquier otra solución para agregar automáticamente el Código onRenderResponse a cada XPage.


5
2017-07-31 05:57


origen


Respuestas:


Puedes hacer esto con un PhaseListener o un tema. Al usar un tema puedes f.e. use una clase de estilo que no necesita en su página XP y calcule el valor:

<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>

El PhaseListener se vería así:

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;
    }

}

7
2017-07-31 11:29



Si tiene un control personalizado que utilizan todas sus XPages, agregue el código beforeRenderResponse a eso. Por ejemplo, puede tener un control personalizado para el diseño de sus páginas.


0
2017-07-31 06:41



Tuve el mismo problema, pero usar el código de Sven en el tema tampoco funcionó. Sin importar el orden, cuando agregué la etiqueta compatible con X-UA y un favIcon en el tema, el favIcon apareció primero después del título en la salida HTML. Eliminando el favIcon solucionado el problema.


0
2018-05-12 16:51