【问题标题】:IE posts a dynamically creted form without parametersIE 发布动态创建的不带参数的表单
【发布时间】:2011-04-14 15:40:52
【问题描述】:

所以我正在生成表单并将其发布到另一个网站。问题是当我使用 IE 表单发布请求时不包含任何参数。 Mozilla 和 IE 8 中的 outerHTML 表单是相同的,所以我无法理解它在 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

【问题讨论】:

  • 这对我来说感觉很熟悉,出于某种原因,我想说 IE 不喜欢你动态更改表单操作时会做一些奇怪的、不一致的事情。您可以在不更新表单操作的情况下演示它吗?另外,你能解释一下你为什么要做你正在做的事情吗?
  • 并非如此。我有一个 aspx 页面,它使用自己的表单进行回发,但在某些情况下,它应该将此表单发布到不同的网站。我尝试制作静态表单,用js填充并发布,但会导致回发问题

标签: javascript html internet-explorer forms post


【解决方案1】:

IE 使用非标准版本的document.createElement,它也支持 HTML 代码而不是简单的标记名称。由于这违反了标准,并且 IE8 为了更加合规而付出了一定的努力,因此 IE8 可能仅在 quirks 模式下遵循非标准变体。

您应该尝试移除document.all 上的开关并将AddField 中的w3c 变体传递给IE8。如果可行,那么您需要测试 IE7 而不是 document.all

顺便说一句,我只是在这里猜测,您需要对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    相关资源
    最近更新 更多