上传onload不适用于firefox iframe

时间:2011-07-04 20:05:11

标签: ajax firefox iframe upload

我在Firefox中遇到问题,文件上传到iframe。一个锚应该调用函数dosubf(),它将表单发布到iFrame上传一个XML文件,该文件稍后将用Ajax解析并在同一页面上以另一种形式显示。

iframe动态生成div标签。当它第一次加载时,工作正常,但是,在Firefox中,当将内容重新加载到div中时,导致错误'var ret is null'!被firebug扩展抓住了。我还注意到在 xmlhttp.open(“POST”,var,var.length)调用上发生了另一个错误,该调用是为了在表格单元格中生成一个select html对象。同样,错误显示某些var为null但在这种情况下,删除程序的函数超出了范围!这两个函数在IE9中都运行良好。

对于第一个问题,我认为它可能与onload事件有关。对于第二个,我真的不知道发生了什么。

下面是将带有方法Ajax的html表单加载到div中以获取XML文件初始输入的代码。

<form id='file_upload_form' method='post' 
enctype='multipart/form-data'   target='upload_targetf' 
action='include/php/util/handle/handlexml.php'>

<input name="file" id="file" type="file" />
<a href="#" class="botao" onclick="dosubf()">IMPORT</a>

<iframe  id='upload_target' name='upload_targetf' onload='lerxml()' ></iframe>
</form>

用于事件的javascript,点击提交表单的按钮。

function dosubf(){
    if (document.getElementById('file').value==''){
        alert ("Por favor seleccione um arquivo");
        return
        }
    document.getElementById('file_upload_form').submit();
}

事件onload的函数在第一次加载到之前显示的HTML的div中时触发良好,但是当我使用Ajax刷新div上的内容并尝试触发onload时失败。它在fire empty onload iFrame上第二次失败,当然还有按钮动作提交onload。

function lerxml(){
    var ret = window.frames['upload_targetf'].document; 
//Here the code breaks with a ret is null error on firebug!
    var novostring='';
    var  d=ret.body.innerHTML;
    var mess='';
    if (d!=''){
        d=eval("("+d+")"); 
//This for getting the JSON response to evaluate the file
        if (d.tipo){
            mess+=(d.tipo);
        }
        if (d.tamanho){
            mess+=(d.tamanho);
        }
        var ok='';
        if (d.sucesso){
//The filepath of the uploaded file to use Ajax for parse it later
            novostring="arquivo/xml/"+d.sucesso;    
        }else{
            novostring="";
            alert (mess);
            return
        }
    }

评估文件上传到iFrame的PHP

<?
$erro = $config = array();

$arquivo = isset($_FILES["file"]) ? $_FILES["file"] : FALSE;

$config["tamanho"] = 500000;

if($arquivo){     

if(!preg_match("/^text\/xml$/",$arquivo["type"]))    {      
$erro['tipo'] = "Não é um arquivo XML! Por favor seleccione outro arquivo"; 
}    else    {        

if($arquivo["size"] > $config["tamanho"])        {            
$erro['tamanho'] = "Arquivo em tamanho muito grande!";
} 

}

if(sizeof($erro))    {
 foreach($erro as $err)      {
  $err=htmlentities($err);
 }

echo json_encode($erro);
die;
}else    { 

$imagem_nome = md5(uniqid(time())) . ".xml";

$imagem_dir ['sucesso'] = "arquivo/xml/" . $imagem_nome; 
move_uploaded_file($arquivo["tmp_name"],"../../../../".$imagem_dir ['sucesso']);
echo json_encode(htmlentities($imagem_dir));
}

}
?>

嗯,我希望能够明确地向你提供一些帮助。

提前感谢您的任何意见。

1 个答案:

答案 0 :(得分:1)

我打赌你遇到了https://bugzilla.mozilla.org/show_bug.cgi?id=170799

尝试将window.frames['upload_targetf'].document替换为document.getElementById("upload_target").contentDocument,这不会出现同样的问题。