2013-07-31 27 views
5

Như câu hỏi của tôi Tiêu đề đã cho biết tôi gặp sự cố khi buộc IE8 không sử dụng chế độ tương thích.Buộc IE8 không sử dụng chế độ tương thích, sử dụng MetaData trong Chủ đề không hoạt động

tôi thấy hai giải pháp trên web một từ Michael Gollmick, mà thêm Bộ luật này vào beforeRenderResponse:

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

Giải pháp này hoạt động tốt chế độ nút Compatibility trong disapears Trình duyệt và các trang có vẻ như nó nên. B

ut Tôi không muốn thêm Bộ luật này cho mọi XPage, vì vậy tôi đã thử các giải pháp từ mỗi Henrik Lausten thêm siêu dữ liệu để Theme của tôi:

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

Nhưng có vẻ như siêu dữ liệu này trong Theme không có efect. Khi xem mã nguồn HTML, tôi tìm thấy thẻ Meta trong phần đầu của mã nguồn nhưng IE8 dường như chỉ bỏ qua nó.

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

Vậy làm cách nào để có được MetaData từ Chủ đề hoạt động? Hoặc giải quyết bất kỳ giải pháp nào khác để tự động thêm Mã onRenderResponse vào mọi XPage.

Trả lời

7

Bạn có thể làm điều này với một PhaseListener hoặc một Theme. Khi sử dụng một Theme bạn có thể f.e. sử dụng một styleClass bạn không cần trong XPage của bạn và tính toán giá trị:

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

Các PhaseListener sẽ trông như thế này:

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

Cảm ơn Sven. Tôi sử dụng cái đầu tiên và đặt nó vào Chủ đề. –

0

Nếu bạn có một điều khiển tùy chỉnh mà tất cả XPages của bạn sử dụng, thì hãy thêm mã beforeRenderResponse vào đó. Ví dụ, bạn có thể có một điều khiển tùy chỉnh cho bố trí các trang của bạn.

+0

Tôi đã thêm mã vào LayoutCC nhưng có các Trang nơi tôi không sử dụng/cần điều khiển này vì vậy suy nghĩ của tôi là một CC riêng biệt. Đó là một giải pháp nhưng tôi sẽ prefere một thanh lịch hơn một 'giải quyết nó ở một nơi', như Theme hoặc với một database.propertie. –

0

tôi đã cùng một vấn đề, nhưng sử dụng mã của Sven trong chủ đề cũng không hoạt động. Bất kể thứ tự như thế nào, khi tôi thêm thẻ Tương thích X-UA và favIcon vào chủ đề, favIcon được liệt kê đầu tiên sau tiêu đề trong đầu ra HTML. Xóa favIcon đã khắc phục sự cố.

+0

Không ai trong số họ làm việc cho tôi: (Tôi vẫn còn cùng một vấn đề. X-UA-Tương thích IE11 dojo DataGrid không Hiển thị giá trị.Các dịch vụ còn lại Hoạt động tuyệt vời nhưng dữ liệu không được hiển thị: ( Đây là câu hỏi của tôi http://stackoverflow.com/questions/34844425/xpages-dojodatagrid-does-not-show-data-in-internet-explorer-11 –

Các vấn đề liên quan