为什么submit()不能在文件上传表单上使用FireFox 23?

时间:2013-09-05 22:45:29

标签: javascript forms firefox

我的网站上有文件上传功能,可在Chrome,Safari,IE 7及其上正常使用。 10,但它只适用于FireFox 23.0.1。

以下是代码:

HTML:

<iframe style="display:none" src="about:blank" id="up_frame" name="up_frame" onload="iFrameDone()"></iframe>

JavaScript的:

function Create(tag,type,obj){
    var n = document.createElement(tag);
    if(type) n.type = type;
    n.id = UniqueId();
    obj.appendChild(n);
    return n;
}
.
.
.
fm = Create("form",null,uplButton);
fl = Create("input","file",fm);
fl.name = "up_file";
if(ie){
   // Keep Internet Explorer from complaining
   // move the from to a proper place & apply some styles.
}else{
    fm.Opacity(0);  // make it transparent
}
fl.onchange = function(){
   fm.method = "post";
   fm.encoding = "multipart/form-data";
   fm.action = "upload";
   fm.target = "up_frame";
   fm.submit();
}

基本上我正在做的是在我的上传按钮顶部创建一个表单,然后使其透明,这是在我的设计中实现视觉一致性的技巧。当用户选择文件时,会触发 onchange 事件,并通过隐藏的 iframe 提交表单。

这适用于Chrome和Safari。为了使其在IE上工作,我必须保持表单可见,否则它会抱怨:“访问被拒绝”,这就是 if 的原因,但正如您所看到的,表单提交机制是所有浏览器都一样。

我使用FF调试器跟踪代码,并且提交即将执行 fm 的所有成员包含预期值,但如果我单击单步按钮执行 fm.submit(),它似乎只是跳过指令而没有做任何事情,没有任何内容发送到服务器并且没有错误/警告信息记录在控制台上,所以我不知道发生了什么。

请注意:

为了抛弃类似我在IE上遇到的类似问题,我测试了可见的形式,但仍然有相同的行为。

还注意:

这个技巧或类似的技巧被用于所有主要的电子邮件服务,因此有一种方法可以使它工作,请不要给我答案,如:“添加提交按钮”。

这意味着没有安全问题,因为我没有尝试强制上传特定文件。我要做的是弹出“文件上传”窗口并上传用户选择的文件,由他/她自己的,自觉的,有意识的。但是,如果浏览器确实认为这是一个安全问题,那么为什么它没有登录到控制台?或以其他方式报告给用户。

1 个答案:

答案 0 :(得分:1)

解决之后:卸载FF,从官方Mozilla网站下载并再次安装。记录:如果您计划安装Fire Fox,请确保从官方Mozilla网站下载它......

发生这种情况是因为我忽略了我的防病毒软件给我的关于我下载第一个安装包的网站的警告。