0

我在 iframe 内加载了一个页面,该页面上是一个带有两个文件输入标签的表单元素,其目标设置为与表单位于同一页面内的 iframe。提交表单后,它将文件发送到 JSP 页面,在处理文件上传返回后,该页面会写出一些 javascript,通知用户上传已完成并执行一些其他处理。在 FF 和 Chrome 上,这个设置工作得很好,但由于某种原因,在 IE 中,而不是在 iframe 中加载表单操作,会弹出一个新窗口。

我将表单、输入和 iframe 插入到通过以下 javascript 加载到第一个 iframe 的页面的 DOM 中:

var containerDiv = document.createElement('div');
containerDiv.setAttribute("id", "containerDiv");
containerDiv.style.position = "absolute";
containerDiv.style.top = "360px";
containerDiv.style.left = "20px";
containerDiv.style.width = "300px"

var iFrame = document.createElement('iframe');
iFrame.setAttribute("id", "target-iframe");
iFrame.name = "target-iframe";
iFrame.style.visibility = "hidden";
iFrame.style.height = "50px";

var zipInput = document.createElement('input');
zipInput.setAttribute("type", "file");
zipInput.setAttribute("id", "zipInput");
zipInput.setAttribute("name", "test");
zipInput.setAttribute("title", "Test");
zipInput.style.marginBottom = "10px";

var pdfInput = document.createElement('input');
pdfInput.setAttribute("type", "file");
pdfInput.setAttribute("id", "pdfInput");
pdfInput.setAttribute("name", "test");
pdfInput.setAttribute("title", "Test");

var form = document.createElement('form');
form.setAttribute("id", "uploadForm");
form.setAttribute("enctype", "multipart/form-data");
form.setAttribute("action", "http://servername:8090/xmlserver/jsp/Upload.jsp?BatchID=" + CSForm.getField("BatchID").getValue());
form.setAttribute("method", "POST");

document.getElementById("DFS__pagediv1").appendChild(containerDiv);
document.getElementById("containerDiv").appendChild(form);
document.getElementById("containerDiv").appendChild(iFrame);
document.getElementById("uploadForm").appendChild(zipInput);
document.getElementById("uploadForm").appendChild(pdfInput);

我已经根据下面的代码将表单目标设置为 iframe 名称,但它仍然会为 IE 弹出一个新窗口。

document.getElementById('uploadForm').target = document.getElementById("target-iframe").name;
alert(document.getElementById('uploadForm').target);
document.getElementById('target-iframe').style.visibility="Visible";
document.getElementById("uploadForm").submit();

我希望这是我所缺少的基本内容,我非常感谢您可能拥有的任何帮助或解决方法。

先感谢您!

4

1 回答 1

0

我使用以下代码的变体来解决此问题。显然,在 IE 中命名 iFrame 实际上并没有命名 iFrame。

var iFrameID  = 'ID1';
var myIFrame = document.createElement('iframe');

myIFrame.setAttribute('src', 'about:blank');
myIFrame.setAttribute('id', iFrameID);
myIFrame.setAttribute('NAME', iFrameID);
myIFrame.style.display = 'none';
document.body.appendChild(myIFrame);
if((onReadyFunction) && (typeof(onReadyFunction) == 'function'))  captureEvent('load', function(){ var iFrame = document.getElementById(iFrameID); var doc = (iFrame.contentDocument)?(iFrame.contentDocument):((iFrame.contentWindow)?(iFrame.contentWindow.document):(self.frames[iFrameID].document)); if (doc.location.href == 'about:blank') { return; } else { onReadyFunction(doc.body.innerHTML); } }, myIFrame);
[B]if(self.frames[iFrameID].name != iFrameID) { /* *** IMPORTANT: This is a BUG FIX for Internet Explorer *** */ self.frames[iFrameID].name = iFrameID; }[/B]
于 2013-02-08T20:45:24.017 回答