JavaScript: Mit Page-Visibility-API die Sichtbarkeit aufgerufener Seiten feststellen

Nicht immer werden Seiten, die im Browser aufgerufen werden, auch direkt wieder geschlossen. In Zeiten der Tabs stehen oftmals mehrere geöffnete Seiten in entsprechenden Tabs nebeneinander im Browser. Mit der neuen Page-Visibility-API lässt sich per JavaScript herausfinden, ob sich eine Seite gerade in einem sichtbaren Tab befindet oder in einem nicht sichtbaren Tab im Hintergrund.

Einsatzmöglichkeiten der Page-Visibility-API

Gerade bei Seiten, die sehr rechenintensiv sind, da beispielsweise parmanent per Daten nachgeladen oder Animationen ausgführt werden, bietet sich die Page-Visibility-API an. Sie kann dafür sorgen, dass diese rechenintensiven Funktionen nur dann ausgführt werden, wenn sich die Seite auch in einem sichtbaren Tab befindet.

Auch für Seiten mit Videowiedergabe kann die Page-Visibility-API Verwendung finden und dafür sorgen, dass eine Wiedergabe automatisch angehalten wird, wenn der Tab der Seite in den Hintergrund verschwindet, da beispielsweise ein anderer Tab aufgerufen wird.

Als sichtbar gilt eine Seite, wenn sie sich in einem aktiven Tab befindet. Als unsichtbar gilt eine Seite, wenn sie sich in einem Tab im Hintergrund befindet oder wenn das Browserfenster minimiert ist.

So funktioniert die Page-Visibility-API

Es gibt zwei Möglichkeiten, herauszufinden, ob die Seite sichtbar oder nicht sichtbar ist. Die einfachste Variante ist eine Abfrage der Objekteigenschaft „document.hidden“:

if (document.hidden == false) {
  document.title = "Sichtbare Seite";
}

Die Eigenschaft „document.hidden“ gibt „true“ zurück, wenn die Seite nicht sichtbar ist und „false“, wenn die Seite sichtbar ist. Da sich die Page-Visibility-API noch in einem experimentellen Stadium befindet, muss derzeit noch mit Vendor-Präfixen gearbeitet werden. Aus „document.hidden“ wird dann „document.mozHidden“ für Gecko-Browser beziehungsweise „document.webkitHidden“ bei Webkit-Browsern.

Wer mehr Informationen über den aktuellen Status der Sichtbarkeit der Seite erfahren möchte, kann mit der Objekteigenschaft „document.visibilityState“ neben der Sichtbarkeit einer Seite auch noch den Ladestatus erfahren:

if (document.visibilityState == "visible") {
  document.title = "Sichtbare Seite";
} else if (document.visibilityState == "hidden") {
 document.title = "Nicht sichtbare Seite";
} else if (document.visibilityState == "prerender") {
 document.title = "Inhalte werden geladen";
}

Neben den Werten „visible“ und „hidden“ kennt die Eigenschaft noch den Wert „prerender“ für den Fall, dass eine Seite noch Inhalte lädt. Der Wert wird nur beim erstmaligen Laden einer Seite ausgegeben. Auch für „document.visibilityState“ müssen derzeit noch die entsprechenden Vendor-Versionen verwendet werden, also „document.mozVisibilityState“ und „document.webkitVisibilityState“.

Sichtbarkeit einer Seite überwachen

Sinnvoll eingsetzt werden kann die Page-Visibility-API nur, indem man den Sichtbarkeitsstatus über einen Event-Handler auf Änderungen überwacht. Nur so kann die feststellen, ob der Tab der Seite gerade in den Hintergrund rückt beziehungsweise ob der Tab wieder aktiviert wird.

Mit dem Ereignis „visibilityChange“ lässt sich genau dieser Status feststellen:

document.addEventListener("visibilitychange", seitentitel, false);

function seitentitel() {
  if (document.visibilityState == "visible") {
   document.title = "Sichtbare Seite";
  } else if (document.visibilityState == "hidden") {
   document.title = "Nicht sichtbare Seite";
  } else if (document.visibilityState == "prerender") {
   document.title = "Inhalte werden geladen";
  }
}

Das Ereignis „visibilityChange“ wird immer dann ausgelöst, wenn die Seite ihre Sichtbarkeit ändert. Über die dann aufgerufene Funktion – im Beispiel „seitentitel()“ – wird der Titel der Seite geändert. Alternativ lässt sich zum Beispiel auch eine Videowiedergabe anhalten beziehungsweise fortsetzen.

Auch bei dem Ereignis gilt es, den jeweiligen Vendor-Präfix zu verwenden, also „mozVisibilityChange“ und „webkitVisibilityChange“. Derzeit unterstützen Firefox und die Page-Visibility-API.

Was denkt ihr über die Page-Visibility-API? Könnt ihr euch weitere Szenarien vorstellen, für welche die API sinnvoll eingesetzt werden kann?

Weiterführende Links zum Thema JavaScript:

Weitere Artikel zu Browser, API und JavaScript

Das interessiert dich bestimmt auch

8 Answers

  1. von Michael Seiler-Gerstmann 16.02.2012 (10:05Uhr) 1.

    Super Sache, habe vor kurzem auch damit experimentiert. Besonders praktisch für das abschalten von Videos oder Musikplayern. Ich warte aber noch mit dem Einsatz in der Praxis ab, bis die Vendor Präfixe weg können.

  2. von Georg 16.02.2012 (12:39Uhr) 2.

    Dies hatte ich noch gesucht ;-)

    Das API befindet sich noch in einem frühen Entwicklungsstadium und wird erst in Chrome ab Version 13, Firefox ab Version 10 und im Internet Explorer auf Version 10 unterstützt.

  3. von maryisdead 16.02.2012 (13:08Uhr) 3.

    Gerade bei Seiten, die sehr rechenintensiv sind, da beispielsweise parmanent per JavaScript Daten nachgeladen oder Animationen ausgführt werden, bietet sich die Page-Visibility-API an. Sie kann dafür sorgen, dass diese rechenintensiven Funktionen nur dann ausgführt werden, wenn sich die Seite auch in einem sichtbaren Tab befindet.

  4. von Jan-Henrik Hempel 16.02.2012 (13:38Uhr) 4.

    Eine interessante Nutzung findet sich auch beim Webtracking. Hier könnte die Besuchszeit ins Verhältnis zur tatsächlichen Nutzung gebracht werden. Wobei das wahrscheinlich keiner wissen möchte - denn damit gibt es zunächst nur eine Reduzierung der Besuchszeiten, keine Erhöhung.

  5. von Armin 16.02.2012 (17:42Uhr) 5.

    Na sichi! Die ganzen "Gibts was neues? Gibts was neues? ..." AJAX-Requests könnte man dadurch aussetzen und so die Last auf dem Server verringern. Man sollte bei der Umsetzung aber dann den IE berücksichtigen, der diese API noch nicht unterstützt. Was passiert dann eigentlich? Wird dann das "visibilitychange" Event einfach ignoriert? Oder muss man das selbst abfangen?

  6. von Armin 16.02.2012 (17:46Uhr) 6.

    Bin ich eigentlich nur blind? Oder gibt es keinen Link zu der API?

  7. von Armin 16.02.2012 (17:47Uhr) 7.

    Mist man kann seinen Beitrag nicht editieren... NEEEIN! Meine dumme Frage wird ewig im Raum stehen bleiben... ähm... haha APRIL APRIL! Natürlich ist das eine in JavaScript eingebaute Funktionalität *hust*

  8. von maryisdead 16.02.2012 (17:49Uhr) 8.

    Krrkrrrkrrr. ^^

Deine Meinung


(wird nicht veröffentlicht)