2009-06-16 2 views
0

Я использую AJAX внутри портлета JSF. Когда сеанс истекает, мы должны получить следующее сообщение (это ответ на запрос AJAX по истечении срока действия сеанса).Firefox не отображает форму

Эта страница используется для хранения ваших данных во время авторизации вашего запроса.

You will be forwarded to continue the authorization process. If this does not happen automatically, please click the Continue button below. 
<CONTINUE BUTTON> 

В IE 6 и 7 я вижу кнопку продолжения. Но в Firefox я не вижу эту кнопку. Только текст виден. Но в исходном коде я вижу этот раздел, но он имеет серый цвет в Firebug. Я загрузил скриншот на http://img31.imageshack.us/img31/619/firefoxcontinue.jpg В идеале он должен автоматически перенаправлять пользователя на страницу входа, так как AJAX не может перенаправить этот , он просто отображает ответ. Кнопка «Продолжить» должна отображаться внутри портлета. Может кто-нибудь, пожалуйста, скажите мне, почему HTML-форма не отображается в Mozilla Firefox.

Thanks

Я создал тестовую страницу. Проблема возникает, когда мы пытаемся вставить форму внутри таблицы.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML> 
<HEAD> 
    <TITLE> New Document </TITLE> 
    <META NAME="Generator" CONTENT="EditPlus"> 
    <META NAME="Author" CONTENT=""> 
    <META NAME="Keywords" CONTENT=""> 
    <META NAME="Description" CONTENT=""> 
</HEAD> 

<BODY> 
<script type="text/javascript"> 
    function insertAjax(){ 
     // alert('inside ajax'); 
     document.getElementById("wpsportlet").innerHTML='This page is used to hold your data while you are being authorized for your request.<br/><br/>You will be forwarded to continue the authorization process. If this does not happen automatically, please click the Continue button below.<form action="http://www.google.com" method="get" name="AUTOSUBMIT"><input type="submit" value="Continue"/></form>'; 

    } 

</script> 
<input type=button value="Submit" onclick="insertAjax();"> 
    <div id="wpsportlet"> 


    </div> 
</BODY> 
</HTML> 

Если я устанавливаю форму внутри таблицы, форма не отображается в Firefox. Может кто-то, пожалуйста, помогите работать для этого.

ответ

1

сгенерированный DOM является недействительным. Символьные данные (текст) и < br>, < form> и < script> элементы могут не быть дочерними элементами элементов - только < tbody>, < thead> и < tfoot> элемент может (хотя в XHTML у вас может быть < tr> элементы тоже).

Чтобы эти элементы существовали внутри таблицы, они должны отображаться полностью внутри ячейки таблицы.

Учитывая, что сбой HTML-кода, Firefox будет эффективно компенсировать ошибки автора, но когда разбитая DOM создается с помощью JS, вы обходите некоторые из процедур автокоррекции.

В качестве альтернативы ваш Doctype (HTML + Transitional + No system identifier) ​​вызывает Quirks mode - что обычно не помогает.

Я предлагаю:

  1. Переключение на DOCTYPE, который запускает режим Standards
  2. Проверка разметка
  3. Постройте содержание вы добавляете с JavaScript, используя обычный HTML вместо
  4. сделать , что Validate
  5. Напишите JavaScript для создания DOM, который вы сейчас тестировали как действительный
0

Почему вы не добавляете кнопку с использованием JavaScript, когда ответ отображается на экране?
Этот способ должен работать во всех браузерах ...

function addButton() { 
    //Create an input type dynamically. 
    var element = document.createElement('input'); 

    //Assign different attributes to the element. 
    element.setAttribute('type', 'button'); 
    element.setAttribute('value', 'Continue'); 
    element.setAttribute('name', 'somename'); 
    element.setAttribute('id', 'someid'); 

    var foo = document.getElementById("fooBar"); 

    //Append the element in page 
    foo.appendChild(element); 
} 
+0

Спасибо за ваш ответ Dror. Проблема заключается в том, что указанное выше сообщение (из внешнего менеджера безопасности-sitemeinder) отображается, когда сеанс истекает. В противном случае отображаются некоторые результаты поиска. Мне нужно проверить, содержит ли ответ определенные поля, а затем добавить элемент, как вы сказали.Но это делает приложение жестко привязанным к SiteMinder. – 2009-06-16 06:36:18

+0

Причина, по которой форма не отображается внутри таблицы, у нас нет тэгов и тд. Если я добавлю те теги, форма будет отображаться. – 2009-06-16 06:39:42

+0

рад слышать, что вы обошли это - напишите свой ответ и примите его за ссылку на других людей, которым может понадобиться ваша работа. – Dror