检测iframe中的连接问题

时间:2015-01-24 16:03:10

标签: javascript jquery html iframe

此问题与调用不同iframe代码中不同页面的html文件有关。有没有办法,使用javascript可能,检查页面是否有连接问题?如果是这样,尝试重新加载此帧直到建立连接。

要更清楚一点,如果您查看以下链接(http://tvgl.barzalou.com)(即使内容是法语,您会注意到页面的不同部分如何加载,而且往往是,正确加载)。但有一段时间,在周末期间,网络上的轻微连接问题到了,出于某种原因,框架发出了这个荒谬的灰色/浅灰色图标,表示存在连接问题。当然,当手动重新加载页面时,框架会恢复生机。

有人可以给我建议或建议吗?谢谢。

2 个答案:

答案 0 :(得分:0)

您可以安排一个代码来检查iframe是否正确加载

考虑一个样本

<script language="javascript">
     var attempts = 0;
     var maxattempt = 10;
     var intid=0;
     $(function()
     {
         intid = setInterval(function() 
         {

            $("iframe").each(function()
            {
               if(iframeHasContent($(this))) 
               {
                  //iframe has been successfully loaded
               }

               if(attempts < maxattempt)
               {
                 attempts++;
               }
               else
               {
                 clearInterval(intid);
               }
            })
         },1000);
     })

     function iframeHasContent($iframe)
     { 
         if($iframe.contents().find("html body").children() > 0)
         {
            return true; 
         }

         return false;
     }   
</script>

这个简单的代码段将检查文档中的iframe是否已正确加载。它将尝试10次尝试,然后将中止检查。

当检查中止时,您可以为每个iframe调用iframeHasContent()以列出尚未加载的iframe,并在需要时重新加载它们。

从我的角度来看,这是一个想法,希望你会发现它很有用!

答案 1 :(得分:0)

请检查更新的代码,该代码将在达到最大尝试次数后检查并重新加载iframe ...

<script language="javascript">
 var attempts = 0;
 var maxattempt = 10;
 var intid=0;
 $(function()
 {
     intid = setInterval(function() 
     {

        $("iframe").each(function()
        {
           if(iframeHasContent($(this))) 
           {
              //iframe has been successfully loaded
           }

           if(attempts < maxattempt)
           {
             attempts++;
           }
           else
           {
             clearInterval(intid);
             checkAndReloadIFrames();

           }
        })
     },1000);
 })

 function iframeHasContent($iframe)
 { 
     if($iframe.contents().find("html body").children() > 0)
     {
        return true; 
     }

     return false;
 }   

 function checkAndReloadIFrames()
 {
     $("iframe").each(function()
        {
            //If the iframe is not loaded, reload the iframe by reapplying the current src attribute
           if(!iframeHasContent($(this))) 
           {
               //reload iframes if not loaded 
               var $iframe = $(this);
               var src = $iframe.attr("src");
               //code to prevent cache request and reload url
               src += "?_" + new Date().getTime();

               $iframe.attr("src",src);
           }
        });
 }
 </script>

希望它有所帮助!