Firefox 11 и Richfaces 3.1.5.GA/jsf 1.1.11 HTML-инъекция

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

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


person James    schedule 16.03.2012    source источник
comment
Я бы сообщил об этом ребятам из RichFaces.   -  person BalusC    schedule 17.03.2012
comment
Может ли кто-нибудь порекомендовать патч, необходимый для: /org/ajax4jsf/javascript/scripts/AJAX.js??   -  person Ben Developer    schedule 27.03.2012


Ответы (3)


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

person Community    schedule 19.03.2012

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

Жан Бланшар объясняет, как это исправить здесь.

Чтобы исправить это, вам нужно обновить файл /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;
person Garytxo    schedule 20.03.2012

У нас также были проблемы, начиная с FF11, и после многих попыток эта ветка решила все наши проблемы:

FF11 и RichFaces

person osundblad    schedule 11.09.2012