Загрузка загрузки не работает на Firefox iframe - PullRequest
1 голос
/ 05 июля 2011

У меня возникла проблема в Firefox с загрузкой файла в iframe.Якорь должен вызвать функцию dosubf () , которая отправляет форму в iFrame, чтобы загрузить файл XML, который будет позже проанализирован с помощью Ajax и отображен в другой форме на той же странице.

Iframe динамически генерируется в тег div.Когда он загружается в первый раз, работает нормально, но в Firefox при перезагрузке содержимого в div выдается ошибка 'var ret is null'!пойманный расширением firebug.Я также заметил, что другая ошибка возникает при вызове xmlhttp.open («POST», var, var.length) , который создается для создания одного объекта html select в ячейке таблицы.Опять же, ошибка показывает, что некоторый var равен null, но в этом случае функция, которая удаляет программу, выходит за рамки!Обе функции прекрасно работают в IE9.

Для первого вопроса я думаю, что это может быть связано с событием onload.Во-вторых, я действительно не знаю, что происходит.

Ниже приведен код, который загружает HTML-форму с методом Ajax в 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 для события onclick кнопки, которая отправляет форму.

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

И функция для события onload, которая срабатывает хорошо, когда это первая загрузка в div HTML, показанный ранее, ноне удается, когда я обновляю с Ajax этот контент на div и пытаюсь запустить 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
        }
    }

PHP, который оценивает загрузку файла в iFrame

<?
$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 Ответ

1 голос
/ 07 июля 2011

Бьюсь об заклад, вы сталкиваетесь с https://bugzilla.mozilla.org/show_bug.cgi?id=170799

Попробуйте заменить window.frames['upload_targetf'].document на document.getElementById("upload_target").contentDocument, что не будет иметь такой же проблемы.

...