2012-11-12 26 views
0

我使用AS3/Flash構建了一個Web應用程序。該應用程序正在觸摸屏顯示器上顯示,因此無需鍵盤或鼠標。目前我只是使用簡單的元刷新來每10分鐘刷新一次頁面。倒計時自動刷新;當沒有互動

問題:當用戶正在與應用程序進行交互時,10分鐘倒計時會一直在後臺運行,並且頁面在與內容交互時自動刷新。

我需要應用程序,瀏覽器擴展或jquery片段來監視是否有任何交互性,並在用戶停止交互後刷新。所以,如果用戶停止,倒數10分鐘開始。如果下一個用戶開始使用它,倒計時將重新開始。

這是我遇到的類似的討論,但其文件更改。 How do I make Firefox auto-refresh on file change?

回答

0

您應該考慮某種類型的信息亭模式擴展。使用腳本刷新頁面的問題是,如果連接斷開,瀏覽器將最終觸發404頁面。由於沒有鍵盤,沒有人可以推動F5刷新它。

+0

謝謝。你是對的,我確實考慮過它。一些亭子在本地託管,這些是連接不好(無線網絡)。但它是設置瀏覽器擴展的理想選擇。如果你知道任何讓我知道的。 謝謝 – user1328229

0

希望這有助於......使用計時器檢查舞臺上的交互,並將URLLoader指向您web服務域上的測試文件以檢查是否所有內容都已啓動並正在運行。如果是這樣,請刷新JavaScript上的location.reload

package { 
    import flash.display.Stage; 
    import flash.events.Event; 
    import flash.events.IOErrorEvent; 
    import flash.events.MouseEvent; 
    import flash.events.ProgressEvent; 
    import flash.events.TimerEvent; 
    import flash.events.TouchEvent; 
    import flash.external.ExternalInterface; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.utils.Timer; 

    public class TimeoutRefresh { 

     private var tt:Timer; 
     private var online:Boolean; 
     private var ldr:URLLoader; 

     public function TimeoutRefresh(stageRef:Stage, minutes:int) { 
      //set up timer 
      tt = new Timer(minutes * 60 * 1000); 
      tt.addEventListener(TimerEvent.TIMER, checkConnection); 
      tt.start(); 
      //listen for interaction 
      stageRef.addEventListener(TouchEvent.TOUCH_BEGIN, refreshTimer); 
      stageRef.addEventListener(MouseEvent.CLICK, refreshTimer); 
     } 

     private function refreshTimer(e:MouseEvent):void { 
      //some interaction on stage, restart timer 
      tt.reset(); 
      tt.start(); 
     } 

     private function checkConnection(e:TimerEvent):void { 
      //no interaction, stop the timer 
      tt.stop(); 
      //check for internet connection 
      var req:URLRequest = new URLRequest("www.yourWebserviceDomain.com/aTestFile.txt"); 
      ldr = new URLLoader(req); 
      ldr.addEventListener(IOErrorEvent.IO_ERROR, onIoErrorEvent); 
      ldr.addEventListener(ProgressEvent.PROGRESS, onLoaderActivity); 
      ldr.addEventListener(Event.COMPLETE, onLoaderActivity); 
     } 

     private function onIoErrorEvent(e:IOErrorEvent):void { 
      //The remote server is not working, maybe it fixes itself in a while... 
      tt.reset(); 
      tt.start(); 
      //remove listeners 
      checkConnectionDone(); 
     } 

     private function onLoaderActivity(e:ProgressEvent):void { 
      //The webservice is up and running, lets refresh... 
      if (ExternalInterface.available) ExternalInterface.call("document.location.reload"); 
      //and reset timer 
      tt.reset(); 
      tt.start(); 
      //remove listeners 
      checkConnectionDone(); 
     } 

     private function checkConnectionDone():void { 
      if (ldr.bytesLoaded < ldr.bytesTotal) ldr.close(); 
      ldr.removeEventListener(IOErrorEvent.IO_ERROR, onIoErrorEvent); 
      ldr.removeEventListener(ProgressEvent.PROGRESS, onLoaderActivity); 
      ldr.removeEventListener(Event.COMPLETE, onLoaderActivity); 
      ldr = null; 
     } 

    } 

} 
+0

我收到以下錯誤: 行71 \t 1120:訪問未定義的屬性onProgress。 – user1328229

+0

對不起@ user1328229,現在它的固定。這個想法是在第一個進度事件被觸發時取消加載,不需要去完整的文件,你只需要知道你可以達到它。 – chq