2013-07-31 3 views
5

Wie mein Fragetitel bereits sagt, habe ich Probleme, den IE8 zu zwingen, den Kompatibilitätsmodus nicht zu verwenden.Erzwinge IE8, den Kompatibilitätsmodus nicht zu verwenden, MetaData in Theme nicht funktionierend

ich zwei Lösungen im Web, ein von Michael Gollmick gefunden, fügt weicht diesen Kodex zum beforeRenderResponse:

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

Diese Lösung funktioniert den Kompatibilitätsmodus-Knopf fein in dem Browser disapears und die Seite sieht aus wie es sollte. B

ut Ich will nicht, diesen Kodex zu jedem XPage hinzuzufügen, so habe ich versucht, die Lösung von Per Henrik Lausten MetaData zu meinem Thema hinzuzufügen:

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

Aber es scheint, dass diese Meta-Daten in dem Thema hat keine Wirkung. Beim Betrachten des HTML-Quellcodes habe ich das Meta-Tag in der Kopfzeile des Quellcodes gefunden, aber IE8 scheint es einfach zu ignorieren.

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

Wie kann ich die MetaData vom Theme arbeiten? Oder irgendeine andere Lösung, um den onRenderResponse-Code jeder XPage automatisch hinzuzufügen.

Antwort

7

Sie können dies mit einem PhaseListener oder einem Theme tun. Wenn Sie ein Theme verwenden, können Sie z. verwenden, um eine styleclass Sie nicht in Ihrem XPage müssen und den Wert berechnen:

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

Die Phaselistener würde wie folgt aussehen:

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

} 
+0

Danke Sven. Ich benutze den ersten und platziere ihn im Theme. –

0

Wenn Sie ein benutzerdefiniertes Steuerelement haben, das alle Ihre XPages verwenden, fügen Sie den beforeRenderResponse-Code hinzu. Zum Beispiel haben Sie möglicherweise ein benutzerdefiniertes Steuerelement für das Layout Ihrer Seiten.

+0

Ich habe den Code zu meinem LayoutCC hinzugefügt, aber es gibt Seiten, wo ich dieses Steuerelement nicht verwende/brauche, so dass mein secound-Gedanke ein separates CC war. Das ist eine Lösung, aber ich würde eine elegantere vorziehen, die "an einem Ort löst", wie das Theme oder mit einer Datenbank.Property. –

0

ich hatte das gleiche Problem, aber Svens Code in das Thema mit hat auch nicht funktioniert. Unabhängig von der Reihenfolge, als ich das X-UA-kompatible Tag und ein favIcon im Theme hinzufügte, wurde das favIcon zuerst nach dem Titel in der HTML-Ausgabe aufgelistet. Durch das Entfernen von favIcon wurde das Problem behoben.

+0

Keiner von ihnen funktionierte für mich :(Ich habe immer noch das gleiche Problem. X-UA-Compatible IE11 Dojo DataGrid zeigt keine Werte. Restdienste Funktioniert gut, aber die Daten werden nicht angezeigt :( Hier ist meine Frage. Http://stackoverflow.com/questions/34844425/xpages-dojodatagrid-does-not-show-data-in-internet-explorer-11 –

Verwandte Themen