我正在通过javascript POST打开一个新窗口,以响应用户在Flash应用程序中的点击。用户可以关闭新窗口,并希望再次单击第一页上的按钮重新打开它。因为我必须将一些大的参数传递给第二页,所以我必须进行POST,GET将无法工作。到目前为止,我第二次打开并在第一次点击按钮时在Chrome,FF和IE中正常运行。但是,在Chrome(它在IE和FF中工作)第二次单击按钮时,将忽略POST并且不会打开新窗口。
这是我用来做POST的功能。我已经确认它已经通过Chrome中的form.submit()行以及所有相同的参数并且没有错误通知,但是仍然无法打开新窗口。
function post_to_url(path, paramString) {
var params = paramString.split("|");
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", path);
form.setAttribute("target", "_blank");
for (var i=0; i<params.length; i++) {
var hiddenField = document.createElement("input");
var param = params[i].split(":");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", param[0]);
hiddenField.setAttribute("value", param[1]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);
}
有关如何修改此功能以使其在Chrome中运行的任何想法吗?
更新: 看来该表单未从Chrome中的DOM中删除。我不确定这是不是问题,但无论如何都应该删除。
我们也注意到,虽然Linux和Windows上的Chrome中的第二个POST没有通过,但它们在Mac上运行。但是,即使在Mac上,表单也不会从DOM中删除。
另一个更新: 改变这样的代码正确地从DOM中删除了表单,但它没有解决POST问题。
function post_to_url(path, paramString) {
var postform = document.getElementById("postform");
if (postform != null)
document.body.removeChild(postform);
var params = paramString.split("|");
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", path);
form.setAttribute("target", "_blank");
form.id = "postform";
for (var i=0; i<params.length; i++) {
var hiddenField = document.createElement("input");
var param = params[i].split(":");
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("name", param[0]);
hiddenField.setAttribute("value", param[1]);
form.appendChild(hiddenField);
}
document.body.appendChild(form);
form.submit();
var postform = document.getElementById("postform");
document.body.removeChild(postform);
}
答案 0 :(得分:1)
我找到了解决方案。在URL末尾添加随机数会导致Chrome多次运行POST。 Chrome中必须有一个“功能”,可防止多个POST到同一个网址。
以下是我改变的内容:
form.setAttribute("action", path + '?' + Math.random().toString());
答案 1 :(得分:0)
确保弹出窗口阻止程序没有阻止第二次打开。我不久前遇到了类似的问题。