GIF加载在Firefox中停止

时间:2011-12-06 22:58:00

标签: java jsp servlets animated-gif

我希望在处理servlet时出现加载gif图像。我所做的是在处理表单之前,我调用一个JSP,其中包含一个带有加载图像的动画gif。从这个JSP中,我将重定向发送到处理表单的servlet。 这仅适用于Chrome和资源管理器,但在Firefox中图像停止移动。

我的表单的动作是一个包含加载图像的JSP,为了提交表单,我有以下代码:

var form = document.getElementById('reporteEstadisticoAnualArticulo');
var win = window.open("", "reporte","width=1002, height=700,location=0, menubar=0, scrollbars=1, status=1,resizable=0");
form.target = "reporte";
form.submit();

JSP包含以下代码:

    <html>
<head>
    <link type="text/css" href="css/Preloader.css" rel="stylesheet"  />
    <script type="text/javascript">
         function retraso(){
       var vars = getUrlVars();
       var location = document.getElementById("url").value;
           window.location = location+"?"+vars ;
           cargarImagen();
         }
         function cargarImagen() {
            document.getElementById("cargando").src = "images/Cargando.gif";
            return false;
         }
    </script>
</head>
<body onload="setTimeout('retraso()',500)">

    <div align="center" class="Preloader1">

        <label style="font-weight: bold; font-family: arial;">Cargando Reporte</label> <br /><br />
        <img id="cargando" alt="LogoNatura" src="images/Cargando.gif">
        <br /><br />
        <img alt="LogoNatura" src="images/logo.png">
    </div>
    <input type="hidden" value="<%= request.getParameter("url") %>" id="url" />
</body>
</html>

我已经尝试了很多东西以避免图像停止移动,但我还没有找到一个好的答案。如果有人可以提供帮助,我会很高兴。 这也不适用于iframe。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

我之前遇到过完全相同的问题。我使用IFrame修复了。

首先创建一个HTML文件并在那里插入图像(加载图标)。现在使用IFrame只需引用该文件。它也适用于Firefox。我做的是,如果它是IE浏览器,我只是直接用图像替换IFrame。

 <td id="tdImgLoad">
  <iframe style="height:50px;text-align:right;width:225px"  scrolling="no" frameborder="0" src="web/loading.htm" id="imgLoad"> </iframe>
 </td>


<script>
     if(isIE())
    {
         getElement ("tdImgLoad").innerHTML ="<img src='images/loading.gif'>";
    }
</script>

答案 1 :(得分:1)

我已经解决了我的问题。我所做的是我使用了ajax而现在我的jsp看起来如下:

<html>
    <head>
        <link type="text/css" href="css/Preloader.css" rel="stylesheet"  />
        <script type="text/javascript" src="js/acciones.js"></script>
    </head>
    <body onload="retraso()">
        <div id ="reporte">
            <div align="center" class="Preloader1" id="loading">
                <label style="font-weight: bold; font-family: arial;">Cargando Reporte</label> <br /><br />
                <img id='cargando' alt='LogoNatura' src='images/Cargando.gif'>
                <br /><br />
                <img alt="LogoNatura" src="images/logo.png">
            </div>
            <input type="hidden" value="<%= request.getParameter("url") %>" id="url" />
        </div>
    </body>
</html>

我的javascript文件acciones.js包含以下函数:

function retraso(){
    var x = document.getElementById("reporte");
    var content = x.innerHTML;
    var vars = getUrlVars();
    var location = document.getElementById("url").value;
    var url = location+"?"+vars ;
    xmlhttp = GetXmlHttpObject();
    if (!xmlhttp) {
        alert ("Browser does not support HTTP Request");
        return;
    }
    var xml = xmlhttp;
    xmlhttp.onreadystatechange = function () {
        if (xml.readyState == 4) {
            x.innerHTML = xml.responseText;
        } else {
            x.innerHTML = content;
        }     
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);

    return true;
}

答案 2 :(得分:0)

我之前遇到过完全相同的问题。我修复了使用setTimeout函数!

当然,ajax也可以运行良好,但我使用的是$(&#34;#form&#34;)。submit()而不是ajax,这意味着submit与gif图像加载过程同步。我认为这个问题可能是由于Firefox的线程进程错误(只有一个嫌疑人)。我的解决方案类似于以下代码:

   $.blockUI({ message: $("#loading").html() });

   setTimeout(function(){
        $("#form").submit();
   },1); 

就像代码告诉的那样,让表单提交不会干扰gif加载过程,然后问题就解决了!

感谢您的关注!

答案 3 :(得分:0)

我遇到了同样的问题,并使用@Zhl给出的答案的变体来解决。我没有将表单提交包装在setTimeout调用中,而是使用setTimeout包装了动画gif的UI更新。这使我不必担心表单提交详细信息,就我而言,该细节需要调用服务器端方法(ASP.NET)。

<form id="myForm">
    <button onclick="myPreSubmitFunction()">Do Stuff</button>
    <img id="loading" />
</form>

<script>
function myPreSubmitFunction() {
    setTimeout(function () {
        //do UI update here which adds gif
        document.getElementById("loading").src = "loading.gif";
    }, 0);

    //submit to come after the UI update
}
</script>

这可防止gif动画因在Firefox中提交的表单动作而停止。关于通过setTimeout运行一行代码可能会有所不同,this SO post is a worthwhile read