2013-07-31 14 views
5

Come la mia domanda dice già che ho problemi a forzare l'IE8 a non utilizzare la modalità di compatibilità.Forza IE8 a non utilizzare la modalità di compatibilità, utilizzando MetaData in Tema non funzionante

ho trovato due soluzioni sul web, uno da Michael Gollmick, wich aggiunge questo codice al beforeRenderResponse:

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

Questa soluzione funziona bene il pulsante di modalità di compatibilità nei disapears browser e la pagina si presenta come dovrebbe. B

ut Non voglio aggiungere questo codice ad ogni XPage, così ho provato la soluzione da Per Henrik Lausten di aggiungere metadati al mio Tema:

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

ma sembra che questi metadati in tema non ha efetto. Quando ho dato un'occhiata al codice sorgente HTML ho trovato il tag Meta nell'intestazione del codice sorgente, ma IE8 sembra ignorarlo.

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

Quindi, come posso ottenere il funzionamento del MetaData dal tema? Oppure maby qualsiasi altra soluzione per aggiungere automaticamente il codice onRenderResponse ad ogni XPage.

risposta

7

È possibile eseguire questa operazione con un PhaseListener o un tema. Quando usi un tema puoi f.e. utilizzare uno styleClass non è necessario nella vostra XPage e calcolare il valore:

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

Il PhaseListener sarebbe simile a questa:

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

Grazie Sven. Io uso il primo e lo inserisco nel tema. –

0

Se si dispone di un controllo personalizzato che utilizza tutte le XPage, quindi aggiungere il codice beforeRenderResponse a quello. Ad esempio potresti avere un controllo personalizzato per il layout delle tue pagine.

+0

Ho aggiunto il codice al mio LayoutCC ma ci sono pagine in cui non uso/ho bisogno di questo controllo, quindi il mio pensiero era un CC separato. Questa è una soluzione, ma preferirei uno più elegante 'risolvendolo in un unico posto', come il tema o con un database.propertie. –

0

Ho avuto lo stesso problema, ma utilizzando il codice di Sven nel tema non ha funzionato neanche. Non importa quale sia l'ordine, quando ho aggiunto il tag X-UA-Compatible e un favIcon nel tema, il favIcon è stato elencato per primo dopo il titolo nell'output HTML. La rimozione di favIcon ha risolto il problema.

+0

Nessuno di loro ha funzionato per me :(Ho ancora lo stesso problema X-UA-Compatibile IE11 dojo DataGrid non mostra valori Servizi di riposo Funziona alla grande ma i dati non sono mostrati :( Ecco la mia domanda http://stackoverflow.com/questions/34844425/xpages-dojodatagrid-does-not-show-data-in-internet-explorer-11 –

Problemi correlati