Приложение JSF с использованием IE11 в режиме предприятия

Наше приложение не может работать с IE11 и EM. Мы используем модификацию JSF-1.2 и RichFaces 3.X. Когда мы запускаем веб-страницу в IE11 без EM, все работает нормально, но мы должны использовать IE11 с EM. Есть ли способ отключить EM для страницы из кода?

IE ошибка вызова консоли: "XML5632: разрешен только один корневой элемент". Возникает при переходе между страницами.

P.S. Приложение работает на IE8, IE9 и IE11 без проблем, но при попытке с IE11 и EM выдает ошибку.


person Eddy_Screamer    schedule 11.12.2014    source источник
comment
Целесообразно ли обновлять JSF и RichFaces? Или перепрограммировать приложение с другими технологиями?   -  person Eddy_Screamer    schedule 16.12.2014
comment
Определение корпоративного режима: В настоящее время страница отображается в корпоративном режиме, который является эмуляцией Windows Internet Explorer 8. И IE8 не поддерживает iframe с элементом ‹html›. ( technet.microsoft.com/library/dn640687.aspx ) Сейчас нет смысла собирать приложение для работы на движке IE8.   -  person Reinaldo Gil    schedule 18.12.2014
comment
Попробуйте добавить заголовок http X-UA-Compatible: IE=Edge from Servlet filter. например: response.addHeader(X-UA-Compatible, IE=Edge);   -  person Reinaldo Gil    schedule 18.12.2014
comment
Проблема была с разбором xhtml..   -  person Eddy_Screamer    schedule 19.12.2014


Ответы (2)


Решение этой проблемы заключается не в шлифовании XHTML с сервера, а в родном HTML. Это обеспечивает фильтр, который меняет ответ с application/xhtml+xml на text/html. Отфильтруйте заголовок формы ответа пользовательского агента и найдите, установлен ли „compatible; msie 8.0“, что означает, что IE11 работает в режиме предприятия и эмулирует IE8.

Наше реализованное решение:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

   String userAgent = ((HttpServletRequest) request).getHeader("user-agent");

   if (userAgent != null && userAgent.toLowerCase().contains("compatible; msie 8.0"))
    {   
     chain.doFilter(request, new ForcableContentTypeWrapper((HttpServletResponse) response));
    }
    else 
    {
     chain.doFilter(request, response);
    }
}

private class ForcableContentTypeWrapper extends HttpServletResponseWrapper
{
     public ForcableContentTypeWrapper(HttpServletResponse response)
    {
    super(response);
    }

    @Override
    public void setContentType(String type)
    {
      if (type.contains("application/xhtml+xml")) 
    {
        super.setContentType(type.replace("application/xhtml+xml", 
                                          "text/html"));
    }
    else 
    {
      super.setContentType(type);
    }

     }
 }
person Eddy_Screamer    schedule 19.12.2014

Если ваше приложение просто ограничено в интрасети и доступно в ограниченной сети, вы можете отключить EM с помощью групповой политики сети.

http://msdn.microsoft.com/en-us/library/dn640688.aspx

или вы можете попытаться удалить URL-адрес вашего приложения из файла SiteList (файл, на который указывает запись EM в реестре, упомянутая в ссылке выше), чтобы ваше приложение не было включено в список сайтов EM.

Дополнительные ссылки: http://msdn.microsoft.com/en-us/library/dn640699.aspx

person securecodeninja    schedule 17.12.2014
comment
Это не решение для меня ... у нашего клиента есть политика компании для этого, и приложение работает во фрейме под другим приложением, которое должно запускаться на EM. Я прошу отключить EM для страницы из кода. - person Eddy_Screamer; 18.12.2014