2011-01-04 4 views
0

-Code aktualisiertRefresh iframe, wenn keine Benutzeraktivität

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 

    <head> 
    <meta content="text/html; charset=utf-8;" http-equiv="Content-Type;" /> 
    <meta http-equiv="Cache-Control" content="no-cache" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <meta http-equiv="Expires" content="0" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script> 
    <script type="text/javascript"> 
    //This goes into a script tag in your head tag 
    var docTimeOut; 

    function bodyTimeOut() { 
     docTimeOut=setTimeout("updateFrame();",10000); 
    } 

    function resetTimeOut() { 
     //alert('reset!'); 
     clearTimeout(docTimeOut); 
     bodyTimeOut(); 
    } 

    function updateFrame() { 
     //Loads the page's html into the div 
     //Uncomment this in your actual code 
     $.get('https://www.creator.zoho.com/somePage/', function(data) { 
      $('openPrintRun').html(data); 
     }); 
     //alert('update!'); 
    } 

    //This function runs when the DOM has finished loading 
    $(function() { 
     bodyTimeOut(); 
     //This binds the resettimeOut function the click, mousemove and mouseover events of the div 
     $('#openPrintRun').bind('click mousemove mouseover', resetTimeOut); 
    }); 
     // --> 
    </script> 


    <title>Untitled 1</title> 
    </head> 

    <body> 
     <div class="openPrintRun" style="height:250px; width:100%;"> 
     </div> 
    </body> 

    </html> 

Ich habe einen Iframe, die ich aktualisieren möchten, wenn es keine Benutzeraktivität ist. Im Moment versuche ich, dies zu verwenden:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<script type="text/javascript"> 
var docTimeOut; 
function bodyTimeOut() 
{ 
    docTimeOut=setTimeout(function(){location.reload();},1200); 
} 

function resetTimeOut() 
{ 
    clearTimeout(docTimeOut); 
    bodyTimeOut(); 
} 


document.onload = bodyTimeOut; 

document.getElementById('openPrintRun').onmouseover= resetTimeOut; 
</script> 
<title>Untitled 1</title> 
</head> 

<body> 
    <iframe id="openPrintRun" height='250px' width='100%' name='zoho-Open_Print_Runs' frameborder='0' scrolling='auto' allowTransparency ='true' src='somepage.html'></iframe> 
</body> 

</html> 

Aber es scheint nicht zu funktionieren. Gibt es einen besseren oder zumindest einen richtigen Weg, dies zu tun?

+0

Nach der Aktualisierung meines Codes habe ich immer noch Probleme damit, den Iframe nicht neu zu laden. Könnte die src-Verbindung überhaupt etwas damit zu tun haben? – shinjuo

Antwort

1

Ich denke, das Problem ist, dass Sie die Seite neu laden, auf der Sie sind, nicht den Iframe. Es gibt ein paar Möglichkeiten, die iframe nachladen:

document.getElementById("openPrintRun").contentDocument.location.reload(); 

ODER

document.getElementById("openPrintRun").contentWindow.location.reload(); 

ODER

document.getElementById("openPrintRun").src = document.getElementById("openPrintRun").src; 

bearbeiten: Dies sollte das Teil in Ihrem Skript ersetzen, wo Sie haben: location.reload();

Sie können eine verwandte Frage finden auf einer anderen Seite here.

Stellen Sie außerdem sicher, dass die zu ladende Seite nicht zwischengespeichert wird oder dass die Seite so aussieht, als wäre sie beim ersten Laden geblieben.

+0

Aber wie funktioniert das ohne Aktivität im iframe? – shinjuo

+0

@shinjuo - Nun, das hast du schon mit deinem onmouseover des iframe. Sie sollten jedoch vorsichtig sein, denn wenn Sie es nur auf das beschränken, was Aaron unten gesagt hat und wenn Sie beispielsweise tippen, wird es immer noch aktualisiert und sie verlieren ihre Informationen. Vielleicht könnten Sie es an ein paar Event-Handler anhängen. dh. wenn sie klicken, drücken, mouseover, mousemove, etc., sollte sie den Timer zurücksetzen, damit er nicht aktualisiert wird, während sie darin Dinge tun. Ich bin mir nicht sicher, ob Sie die Unschärfe-/Fokus-Ereignisse auf einem Iframe verwenden können, aber es lohnt sich auch, darauf zu schauen. –

+0

Sorry, ich war verwirrt, wo deine Codezeilen gelaufen sind, die du mir gegeben hast, aber ich sehe sie jetzt. Auch wenn ich onkeypress hinzufügen und klicken möchte, sollte ich einfach eine andere Zeile hinzufügen wie: document.getElementById ('openPrintRun'). Onkeypress = resetTimeOut; und füge einfach solche Zeilen hinzu, um sie alle zu erhalten oder gibt es einen effizienteren Weg, es zu tun – shinjuo

1

Versuchen Sie, das mousemove Ereignis zu verwenden (gibt es Aktivität, wenn der Benutzer den Mauszeiger im Browser vergisst und weggeht?) Und es stattdessen an das Element body anfügt. Es ist möglich, dass die iframe solche Ereignisse nicht sendet (Sicherheit: Sie können den Mauszeiger nicht von außerhalb des Rahmens beobachten).

+0

Sie sagen es so: document.body.onmousemove = resetTimeOut; – shinjuo

+0

Ich bin nicht 100% sicher mit der Syntax, aber ja, so. Wenn es nicht funktioniert, erstellen Sie ein 'DIV' mit dem' id = "debug" '. Auf diese Weise können Sie die Debug-Ausgabe auf der Seite anzeigen, ohne zu blockieren: 'document.getElementById ('debug'). InnerHtml = 'irgendein Text' ' –