IE отправляет динамически созданную форму без параметров - PullRequest
0 голосов
/ 22 марта 2011

Итак, я создаю форму на лету и публикую ее на другом сайте.Проблема в том, что когда я использую IE, пост-запрос не содержит параметров.Форма externalHTML одинакова в Mozilla и IE 8, поэтому я просто не могу понять, что она не работает должным образом в IE 8. Есть ли способ исправить?

Вот логика, которую генерирует и публикуетформа:

function PostForm() {
    var form = AddForm();

    var email = hiddenEmailCtrl.value;
    var password = hiddenPasswordCtrl.value;
    var checked = rememberMeCtrl.checked;

    AddField(form, "email", email);
    AddField(form, "password", password);
    AddField(form, "remember_me", checked);

    form.action = 'https://somesite.com/login';

    alert(form.outerHTML);
    alert(document.forms[1].outerHTML);

    document.forms[1].submit();
}

function AddForm() {
    var submitForm = document.createElement("form");

    document.body.appendChild(submitForm);

    submitForm.id = 'credentialsForm';
    submitForm.method = "post";
    submitForm.target = '_blank';

    return submitForm;
}

function AddField(formElement, fieldName, fieldValue) {
    var inputElement = null;

    if (typeof (document.all) != undefined && document.all) {
        inputElement = document.createElement("<input type='hidden' name='" + fieldName + "' value='" + fieldValue + "' />");
        inputElement.id = fieldName;
    }
    else {
        inputElement = document.createElement('input');

        inputElement.setAttribute('type', 'hidden');
        inputElement.setAttribute('name', fieldName);
        inputElement.setAttribute('value', fieldValue);

        inputElement.id = fieldName;
    }

    if (inputElement == null) return null;

    formElement.appendChild(inputElement);
    return inputElement;
}

А вот запрос Mozilla:

POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: ensiconnect.groupsite.com
Content-Length: 42
Expect: 100-continue
Connection: Keep-Alive

email=some@email.com&password=somePassword

Это запрос IE8:

CONNECT somesite.com:443 HTTP/1.0
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.1; .NET4.0C; .NET4.0E; AskTbF-ET/5.9.1.14019)
Proxy-Connection: Keep-Alive
Content-Length: 0
Host: ensiconnect.groupsite.com
Pragma: no-cache

1 Ответ

1 голос
/ 14 апреля 2011

IE использует нестандартную версию document.createElement, которая также поддерживает HTML-код вместо простого имени тега. Поскольку это нарушает стандарт, а IE8 стал более совместимым, возможно, IE8 подчиняется нестандартному варианту только в режиме причуд.

Вы должны попробовать отключить переключатель на document.all и передать IE8 вариант w3c в AddField. Если это сработает, вам нужно будет проверить IE7, а не document.all

Кстати, я просто догадываюсь, вам нужно проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...