Änderung wenn user zum Browserfenster- oder Tab zurückkehrt

ThiKool

Erfahrenes Mitglied
Hallo Community,

ich habe ein Script erstellt, welches den Titel abwechseln leer und mit dem Text Neue Nachricht blinken lässt, wenn der User z.B. eine neue persönliche Nachricht bekommen hat. Sowas kennt man ja von Facebook.
Das funktioniert auch alles soweit ganz gut, allerdings möchte ich nun, wenn der User dann von einem anderen Tab wieder zurück zu meinem Tab im Browser springt, oder von einenm anderen Fenster zurück ins Browserfenster, dass der Titel dann nicht mehr blinkt.

Ich dachte dabei an onmousemove allerdings bekomme ich das überhaupt nicht hin, habe gerade eine totale Blockade - oder gibt es sogar eine eleganterere "view"-Funktion?

Hier mein Code:
Code:
<script type="text/javascript">

    function blink_title(title) {
        var eingeblendet = true;
        function change_text() {
         if(eingeblendet) {
            document.getElementsByTagName('title')[0].innerHTML = 'Neue Nachricht';
            eingeblendet = false;
         } else {
            document.getElementsByTagName('title')[0].innerHTML = 'Titel';
            eingeblendet = true;
         }
        }
        setInterval(change_text, 1000);
    }

    blink_title();



    </script>

Ich danke euch :)
 
Es gibt dafür das Focus-Event, was gefeuert wird, wenn ein Fenster den Fokus erhält.
Javascript:
var interval = null,
    title = document.getElementsByTagName( "title" )[ 0 ];
 
window.addEventListener( "focus", function() {
  if ( interval == null ) {
    return;
  }
 
  window.clearInterval( interval );
}, false);
 
function new_message_notification ( notification_message ) {
  var original_title = title.innerHTML;
  
  if ( interval != null ) {
    window.clearInterval( interval );
  }
  
  interval = setInterval(function() {
    if ( title.innerHTML == original_title ) {
      title.innerHTML = notification_message;
    } else {
      title.innerHTML = original_title;
    }
  }, 1000 ); 
}
 
Zuletzt bearbeitet:
Ich hatte aus Versehen einen Tippfehler drin. Es müsste jetzt so wie gedacht gehen.

Nachtrag: Mein vorheriges Skript hatte bisher noch ein Problem, was mir da schon bewusst war, aber ich es erst einmal nicht lösen wollte: wenn man die Funktion new_message_notification aufruft, während diese bereits läuft, und in diesem Moment gerade die Meldung für die neue Nachricht läuft, dann wird dieser Titel als Originaltitel angenommen.

Javascript:
(function() {
  var original_title,
      title    = document.getElementsByTagName( "title" )[ 0 ];
      interval = null;
  
  window.addEventListener( "focus", function() {
    if ( interval != null ) {
      window.clearInterval( interval );
      title.innerHTML = original_title;
    }
  }, true );

  var new_message_notification = function ( notification_message ) {
    if ( interval != null ) {
      window.clearInterval( interval );
      title.innerHTML = original_title;
    }
    
    original_title = title.innerHTML;
  
    interval = setInterval(function() {
      if ( title.innerHTML == original_title ) {
        title.innerHTML = notification_message;
      } else {
        title.innerHTML = original_title;
      }
    }, 1000 );
  };
 
  window.new_message_notification = new_message_notification;
})();

Nachtrag: Ich habe das Ganze mal in ein jQuery-Plugin umgewandelt – füttert die kleine Aufmerksamkeitshure aber bitte nicht ;)
 
Zuletzt bearbeitet:
Meinst du die Klammer hinter else? Die hatte ich schon geändert. Leider funktioniert der Titel gar nicht mehr bzw. bleibt fest. Egal ob ich auf dem Tab bin oder in einem anderen.
 
Ich bin verwirrt, denn bei mir läuft es problemlos. Vielleicht liegt es an deinem Browser. Dazu müsste ich allerdings wissen, welchen Browser du verwendest.
 
Sehr komisch, ich nutze den aktuellen Firefox.

Also nur das wir uns richtig verstehen :) Sagen wir mal auf Tab1 liegt die Seite, du bist gerade auf Tab2 hier im Forum.

Durch einen Reload fängt der Titel auf Tab1 zu blinken.

Du wechselst nun rüber zu Tab1 und es soll das blinken aufhören, da du ja jetzt wieder das Fenster ansiehst.
 
Für mich ist es nur komisch, dass es dann bei Dir nicht funktioniert, aber mir schon. Und ja, wir haben die gleiche Vorstellung davon, was passieren soll.

Nachtrag: Ich habe es jetzt sowohl im Firefox 27 als auch im Chrome 33 unter Linux getestet – und es geht in beiden Fällen.
 
Zuletzt bearbeitet:
Zurück