Firefox 11 и richfaces 3.1.5.GA/jsf 1.1.11 html инъекция - PullRequest
0 голосов
/ 17 марта 2012

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

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

Ответы [ 3 ]

0 голосов
/ 20 марта 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;
0 голосов
/ 11 сентября 2012

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

FF11 и RichFaces

0 голосов
/ 19 марта 2012

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

...