Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中创建表单在Chrome中工作,而不是在Edge中?_Javascript_Forms_Google Chrome_Microsoft Edge - Fatal编程技术网

在javascript中创建表单在Chrome中工作,而不是在Edge中?

在javascript中创建表单在Chrome中工作,而不是在Edge中?,javascript,forms,google-chrome,microsoft-edge,Javascript,Forms,Google Chrome,Microsoft Edge,我有一个有趣的案例,关于到底发生了什么,我似乎无法解决 我需要以编程方式创建一个表单,并将其作为post请求发送。然后,我的请求返回一些html布局并将其绘制到发布请求的窗口。这就是我在底部创建新窗口的原因。 我的解决办法如下 // Define params var path = someRequestPath; var params = { DOCNAME: 'DocumentName', FORMAT: 'A4', ORIENTATION: 'Landscape',

我有一个有趣的案例,关于到底发生了什么,我似乎无法解决

我需要以编程方式创建一个表单,并将其作为post请求发送。然后,我的请求返回一些html布局并将其绘制到发布请求的窗口。这就是我在底部创建新窗口的原因。 我的解决办法如下

// Define params
var path = someRequestPath;
var params = {
    DOCNAME: 'DocumentName',
    FORMAT: 'A4',
    ORIENTATION: 'Landscape',
    HTML: htmlContent
};

// Create form to submit request
var form = document.createElement('form');
form.method = "POST";
form.action = path;

// Set form params
for (var key in params) {
    if (params.hasOwnProperty(key)) {
        var hiddenField = document.createElement('input');
        //hiddenField.type = 'hidden';
        hiddenField.name = key;
        hiddenField.value = params[key];

        form.appendChild(hiddenField);
    }
}

//Create window and submit form
var win = window.open('', 'windowName', 'width=1400,height=1200');
win.document.body.appendChild(form);
form.submit();
win.focus();
现在这个解决方案在Chrome中运行得非常好,但在Edge中我得到以下错误
对象不支持属性或方法“Symbol.iterator”
。它发生在我通过
appendChild
将表单附加到新打开的窗口的第行。由于Edge运行的是Chromium core,所以我希望它的行为会相同,但显然不是这样

有什么想法吗

谢谢。

看看这个:

这似乎是Edge没有为…实现
的问题。。。节点列表中的of/in


也许可以尝试使用
for(数组中的var key.from(params))

从下面的描述中

看起来您正在使用Edge Chromium浏览器,但根据我的测试结果,看起来您正在使用Edge legacy浏览器

我尝试在Edge Chromium浏览器和Edge legacy浏览器中测试您的示例代码

您的代码在Edge Chrome浏览器中运行良好,并提供与Google Chrome浏览器相同的结果

边缘铬版本87.0.664.55的测试结果:

您的代码在Microsoft Edge旧版44.19041.423.0的同一行中出现以下错误:

米歇尔已经在评论中提出了解决这一问题的建议

因此,我建议您可以尝试检查并确认您在进行此测试时使用的边缘浏览器。如果要移动到MS Edge Chromium浏览器,则可以从下载

如果我对你的描述有任何误解,请告诉我,我会尽力改正


谢谢你的理解。

我试过了,没用。当我的错误发生时,这个迭代已经完成,并且正确创建了
form
元素,包含所有必要的输入。但是谢谢你的提示。:)如果使用
win.document.write()
win.document.body.innerHTML=
而不是
appendChild()
,会发生什么情况?使用
win.document.body.innerHTML=form.outerHTML
可以绕过我的问题,但是
form
不会附加到子窗口并调用
form.submit()
在这种情况下,会导致父窗口的内容被覆盖。但从这一点来看,假设
表单
结构中存在问题是正确的吗?看看好的,我不知道文档中的表单可以这样访问。那很有效,非常感谢。不过,我还是很好奇为什么
appendChild
不起作用。我的猜测是:blank的结构在Chrome和Edge中是不同的,或者当Edge尝试附加到empty
body
时失败了,而Chrome创建了一些默认结构?您好,Deepak,非常感谢您的回答!我确实在运行Edge的遗留版本。由于软件部门发生了什么,我们开发人员没有得到Chromium版本。老实说,我甚至没有意识到这一点,因为我主要使用Chrome,但我们的一些用户运行Edge,所以这次我不得不在那里进行测试。