Javascript IE发布了一个没有参数的动态认证表单
所以,我在飞行中生成表单并将其发布到另一个网站。问题是,当我使用IE表单时,post请求不包含任何参数。outerHTML的形式在Mozilla和IE8中是相同的,所以我不能理解它在IE8中不能正常工作。 有什么办法可以解决吗 以下是POST生成和发布表单的逻辑:Javascript IE发布了一个没有参数的动态认证表单,javascript,html,internet-explorer,forms,post,Javascript,Html,Internet Explorer,Forms,Post,所以,我在飞行中生成表单并将其发布到另一个网站。问题是,当我使用IE表单时,post请求不包含任何参数。outerHTML的形式在Mozilla和IE8中是相同的,所以我不能理解它在IE8中不能正常工作。 有什么办法可以解决吗 以下是POST生成和发布表单的逻辑: function PostForm() { var form = AddForm(); var email = hiddenEmailCtrl.value; var password = hiddenPass
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;
}
这是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使用非标准版本的
document.createElement
,它也支持HTML代码而不是简单的标记名。由于这违反了标准,并且IE8为了更符合标准而进行了一些修改,所以IE8可能只在“怪癖”模式下遵守非标准变体
您应该尝试移除文档上的开关。所有并在AddField
中传递w3c变量IE8。如果这样做有效,那么您需要测试IE7,而不是编写文档
顺便说一句,我在这里只是猜测,你需要测试一下。这对我来说很熟悉,出于某种原因,我想说IE不喜欢动态更改表单动作,并且在这样做时会做奇怪的、不一致的事情。您可以在不更新表单操作的情况下演示它吗?另外,你能解释一下你为什么要做你正在做的事情吗?不完全是。我有一个aspx页面正在使用自己的表单进行回发,但在某些情况下,它应该将此表单发布到其他网站。我试着制作静态表单,用js填充并发布,但会导致回发问题
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