Domanda

Ho un funzione di back chiamata Ajax che chiamata a una funzione PHP controllare il tempo di file modificato. I utilizza timer per eseguirla ogni 50 secondi.

    <script type="text/javascript">
    setInterval("_checkPopUpUpdate()", 50000); //50 seconds
    </script>

    function _checkPopUpUpdate()
    {
        var callback=new Object();
        callback.success=this.onExternalSuccess;
        callback.failure=this.onExternalFailure;
        YAHOO.util.Connect.asyncRequest('GET','/ci/ajaxCustom/ajaxCheckPopupUpdate',callback);
};

La funzione PHP verifica se il tempo di file modificato ha diverse tra il primo tempo della sessione di carico

     $announcement_Popup_Path = HTMLROOT . $this->data['attrs']['file_path'];
  // Call model function

 if($this->data['attrs']['file_path'] !== '' && file_exists($announcement_Popup_Path))
 {
     //When the announcement content load, it always stores the modified time into session
         $this->CI->load->model('custom/checkupdate_model');
           $firstloadTime = filemtime($announcement_Popup_Path);
     $this->CI->checkupdate_model->store_AnnouncementPopupSession($firstloadTime);
     //$this->data['Popup'] = file_get_contents($announcement_Popup_Path);
 }    

        function store_AnnouncementPopupSession ($popupTime)
    {
 $sessionPopupTime =array("annoucementPopUp"=> $popupTime);
 $this->session->setSessionData($sessionPopupTime);
    }

     function announcement_pop()
    {
 $file_path='/euf/assets/announcements/pop_up_announcement.html';
 $announcement_Popup_Path = HTMLROOT . $file_path;
 if(file_exists($announcement_Popup_Path)) {
     $currentAnnouncementPopUpTime = filemtime($announcement_Popup_Path);
     $oldannouncementPopupTime = $this->session->getSessionData("annoucementPopUp");

     if($currentAnnouncementPopUpTime !=$oldannouncementPopupTime) {
  //comparing the content and update the time, when they are different,  send back update content
  $this->store_AnnouncementPopupSession($currentAnnouncementPopUpTime);
  //echo $currentAnnouncementPopUpTime;
  echo $file_path;
     }
     else {
  echo "no update";
     }
 }
    }

Quando il tempo di file modifed è cambiata, tornerà all'Ajax chiamata indietro e prendete il contenuto HTML nel mio server web per apparire un annoucement finestra pop-up.

    function onExternalSuccess (o){
    if(o.responseText!==undefined)
    {
 var str=o.responseText;


     if(str !== 'no update') // Then pop up.
     {
  L=screen.width-200;
  T=screen.height;
  popup=window.open(str," ",'alwaysRaised=yes,status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=no,scrollbars=no,height=150,width=364,left="+L+",top="+T');
  //popup=window.open(str,"",'alwaysRaised=yes,status=no,toolbar=no,location=no,menubar=no,directories=no,resizable=no,scrollbars=no,height=100,width=330');
  for (i=0;i<200;i++)
  {
      T=T-1;
      popup.moveTo(L,T);
  }
     }
    }
};

Funziona benissimo per Firefox e Chrome, tuttavia IE7 è un po 'bugy, qualche volta il pop-up non viene fuori.

<html>
    <head>
 <title>Internal alert</title>
 <link rel="stylesheet" type="text/css" href="/euf/assets/css/pop_up_ann.css" media="screen, projection" />
 <script type="text/javascript">
    var howLong = 50000; //5 minutes, 1 seconds = 1000 milliseconds.
    t = null;
    function closeMe(){
    t = setTimeout("self.close()",howLong);
    }
      </script>
    </head>
    <body onLoad="closeMe();self.focus();">
 <div id="cs_popup">
        <div class="popup_rounded-corner-top">
            <div id="popup_ann">
                <div id="popup_ann_title">IE7 pop-up EMEA test close </div>
                <div id="popup_ann_from"> PLC team - 05/01/2011 at 12:10</div>
            <div id="popup_ann_content">
            Something has changed in the<em>&quot;Alerts&quot;</em> section of S4S since your last visit.
            Make sure you go there as soon as you can to be informed about the current situation.
            </div>
            </div>
        </div>
        <div class="popup_rounded-corner-bottom"></div>
    </div>
    </body>
</html>

Il problema principale che ho qui è auto-funzione di chiusura. E chiudere la mia finestra pop-up e il sito web pure. Eventuali suggerimenti? Inoltre, io non sono sicuro se tutto il mio pop up annoucement struttura logica è corretta, c'è comunque? grazie

È stato utile?

Soluzione

Apertura di una finestra pop-up per un annuncio come questo potrebbe essere problematico per persone in esecuzione blocca popup, che in genere consentono solo popup a comparire in risposta a un evento avviato dall'utente come cliccando su qualcosa. Un approccio migliore sarebbe quella di utilizzare un popup in linea che sarebbe anche dare la possibilità di visualizzare il popup modale (cioè mascherare il resto della pagina con un div semi-trasparente) se si richiede loro di riconoscere il vostro messaggio.

L'uso di self.close () non dovrebbe chiudere la finestra / tab originale aperto dall'utente, deve solo chiudere le cose che sono state 'open'ed quindi non sono sicuro di quello che sta succedendo lì, voi ho il sospetto non ci hanno detto tutto :) Un approccio alternativo potrebbe essere quello di modificare la funzione popup per chiudere la finestra, piuttosto che avere la finestra chiudersi.

// open popup ... then set timeout to close it
var popupDelay = 50000;
setTimeout(function() {
  popup.close();
}, popupDelay);

Questo può funzionare un po 'meglio, non è sicuro. Ma nel lungo periodo, mi raccomando di evitare i popup e utilizzare qualcosa in linea, invece.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top