我有一个客户端javascript应用程序。在特定触发器处,应用程序使用window.open()创建一个新窗口。在新窗口中,我想允许用户上传文件。为此,我在新窗口中提供了一个表单。表单相当简单 - “file”类型的输入元素和提交按钮。当用户单击第一个元素时,弹出窗口正确显示允许从本地文件系统中选择文件。用户选择文件后,单击“提交”按钮时,窗口将变为空白;文件内容不会上传到服务器。服务器是专有服务器,使用端口号与客户端的http会话使用某些专有端口号(比如30000)。 如果我在原始窗口中使用相同的javascript(即没有打开新窗口),文件内容将被发布,我看到服务器接收文件内容。但如果在新窗口中执行,则没有任何反应。脚本(此功能所需的核心部分)如下所示。
myWin = window.open("", "", "width=400, height=400,scrollbars=yes, resizable=yes");
var myForm = myWin.document.createElement("form");
myForm.action = "";
myForm.method = "post";
myForm.enctype = "multipart/form-data";
myWin.document.body.appendChild(myForm);
var myInp = myWin.document.createElement("input");
myInp.type = "file";
myInp.name = "filename";
myForm.appendChild(myInp);
var myBtn = myWin.document.createElement("input");
myBtn.type = "submit";
myBtn.value = "Upload";
myBtn.onclick = "Upload";
myForm.appendChild(myBtn);
知道可能出现什么问题吗?我是否需要为新窗口进行其他设置?我怀疑可能是新窗口没有上传,因为在新窗口打开时不保持同源策略 - 也许专有端口号不会从第一个窗口复制到第二个窗口;但是 - 我不确定;即使我是,我不知道如何解决这个问题。我将不胜感激任何帮助。感谢。
答案 0 :(得分:0)
您正在打开一个没有网址的空白窗口。此外,您将表单上的操作设置为空白,这意味着将表单提交到同一页面。
弹出窗口中有一个空白网址,没有要提交的页面,因此表单无处可去。
请尝试以下方法之一:
将操作字符串设置为您要将表单提交到的实际页面(这不是跨源控制的)。示例:<form action="submit.php">
通过实际打开包含表单的页面而不是使用JavaScript创建弹出窗口的URL来设置弹出窗口的URL。它将具有相同的外观/大小,但它将被正确提交。确保您在该页面上处理表单提交(如果是PHP或ASP),或者正确设置操作(如前所述)