2012-03-16 4 views
0

Итак, у нас есть приложение jsf/myfaces + rf, которое отлично работает с FF 10. Но на этой неделе вышел FF 11, и мы увидели проблему с html инъекции из тегов a4j. Если у нас есть простая страница facelet и добавьте только один компонент a4j, firefox 11 будет отображать TWO теги головы и тела (одна пара тегов головы и тела просто пуста), и они отображаются в несколько случайном порядке, иногда в пустом теле тег после нашего содержимого страницы, иногда до этого).
Это отбрасывает большую часть нашей сложной логики css и jquery на стороне клиента (у нас есть разработчик css/js, который играет с некоторыми хакерскими способами, но это не идеально). Другие люди видят это или имеют какое-либо представление об обходном пути, поэтому теги a4j не могут автоматически вводить дополнительные теги head/body?firefox 11 и richfaces 3.1.5.GA/jsf 1.1.11 html injection

Я слышал, что jsf2/richfaces 4 не имеет этой проблемы, но для этого потребуется много времени и усилий, поэтому вам хотелось бы посмотреть, есть ли какие-либо другие варианты (и я думаю, действительно, случай, когда rf4 не имеет этой проблемы с FF 11, если нам нужно в конечном итоге обновить). Благодарю.

+2

Я бы сообщить об этом RichFaces парней. – BalusC

+0

Может ли кто-то рекомендовать исправление, требуемое для: /org/ajax4jsf/javascript/scripts/AJAX.js ?? –

ответ

0

Кажется, это ошибка FF: Ajax-Response в порядке, но после вставки html ключ ресурса a4j: mediaOutput изменяется (выглядит так, как будто он закодирован в URL). Таким образом, поиск ресурсов терпит неудачу. После нажатия F5 запрашивается вся страница и действительны адреса. Я пытаюсь сказать: я думаю, что ваш код в порядке, и все мы должны ждать FF12.

0

Похоже, что FF начал поддерживать свойство «внешнийHtml» DOM, поэтому код «A4J.AJAX._scriptEvaluated» вставлен с использованием резервного кода IE-target вместо кода, предназначенного для современных браузеров.

Jean Blanchard объясняет, как исправить это here.

Чтобы исправить это, вам необходимо обновить файл /org/ajax4jsf/javascript/scripts/AJAX.js из richfaces-impl.jar. К сожалению, у меня нет доступа к библиотеке, так вот некрасиво обходной путь я использую:

 <!--[if !IE]> --> 
    <script type="text/javascript"> 
    // <![CDATA[ 
     function fixA4J() { 
      var bodies = document.getElementsByTagName("body"); 
      if (bodies.length > 1) { 
       for (var i = 0; i < bodies.length; i++) { 
        if (bodies[i].firstChild == null) { 
         bodies[i].parentNode.removeChild(bodies[i]) 
         break; 
        } 
       } 
       var heads = document.getElementsByTagName("head"); 
       for (var i = 0; i < heads.length; i++) { 
        if (heads[i].children.length == 1) { 
         var s = heads[i].firstChild; 
         heads[i].parentNode.removeChild(heads[i]) 
         document.head.appendChild(s); 
         break; 
        } 
       } 
     } 
     window.setTimeout(fixA4J, 100); 
    // ]]> 
    </script> 
    &lt;!-- &lt;![endif]--&gt; 
0

Мы также были проблемы, начиная с Тг 11 и после попытки много вещей, эта нить решена все наши проблемы:

FF11 and RichFaces