Korzystanie z interfejsu API widoczności strony

Ernest Delgado
Ernest Delgado

Wstęp

Jako programiści witryn przeważnie interesują nas nowe technologie, które pozwalają nam tworzyć jeszcze ciekawsze i bardziej interaktywne strony internetowe. Grafika 3D z WebGL? Jak najbardziej. Zaawansować funkcje audio w WebAudio? Rozumiem. Aplikacje do współpracy w czasie rzeczywistym używające kamery internetowej i mikrofonu? Chcę się zarejestrować.

Mniej ekscytujące, choć równie ważne, są technologie, które pozwalają nam tworzyć aplikacje, które działają wydajniej i zapewniają użytkownikom lepsze wrażenia. Właśnie tu do akcji wkracza interfejs API typu PageWidoczność.

Interfejs API widoczności strony spełnia prostą, ale ważną funkcję – informuje aplikację, że strona jest widoczna dla użytkownika. Te podstawowe informacje umożliwiają tworzenie stron internetowych, które działają inaczej, gdy nie są wyświetlane. Przyjrzyjmy się kilku przykładom:

  • Strona internetowa, która pobiera informacje z serwera, może spowolnić swój cykl aktualizacji, jeśli nie jest aktywnie wyświetlana
  • Strona, na której wyświetlana jest obracająca się karuzela obrazów albo treści wideo/audio, mogą zostać wstrzymane do czasu ponownego wyświetlenia strony przez użytkownika.
  • Aplikacja może wyświetlać powiadomienia tylko wtedy, gdy jest ukryta.

Na początku ten interfejs API może nie wydawać się zbyt przydatny poza wygodą użytkownika, ale biorąc pod uwagę ogromny wzrost popularności stron internetowych w internecie, wszystko, co pozwala oszczędzać baterię urządzenia, nabiera ogromnego znaczenia. Dzięki interfejsowi PageAvailability API Twoja witryna może pomóc urządzeniu użytkownika w ograniczaniu zużycia energii i dłuższym funkcjonowaniu.

Obsługa przeglądarek

  • 33
  • 12
  • 18
  • 7

Źródło

Specyfikacja interfejsu API, która w tym momencie znajduje się na etapie rekomendacji dla kandydatów i zawiera zarówno właściwości służące do wykrywania stanu widoczności dokumentu, jak i zdarzenie służące do reagowania na zmiany widoczności.

W tym samouczku omówię podstawy interfejsu API i pokażę, jak zastosować go w praktycznych przykładach (jeśli niecierpliwie czekasz, możesz przejść dalej).

Właściwości widoczności dokumentu

Bieżąca wersja specyfikacji PageAvailabilityAPI definiuje 2 właściwości dokumentu: wartość logiczną hidden i wyliczenie visibilityState. Właściwość activityState ma obecnie 4 wartości: hidden, visible, prerender i unloaded.

Jak można się spodziewać, atrybut ukryty zwraca wartość „prawda”, gdy dokument w ogóle nie jest widoczny. Zwykle oznacza to, że dokument jest zminimalizowany, na karcie w tle, włączony ekran blokady systemu operacyjnego itd. Atrybut ma wartość false (fałsz), jeśli jakakolwiek część dokumentu jest przynajmniej częściowo widoczna na co najmniej jednym wyświetlaczu. Dodatkowo, aby zapewnić zgodność z narzędziami ułatwień dostępu, można ustawić wartość false (fałsz), gdy narzędzie takie jak lupa całkowicie zasłania dokument, ale jest widoczne.

radzenie sobie z prefiksami dostawców

Aby skupić się na kodzie, a nie na całym prefiksie specyficznym dla danego dostawcy, użyję funkcji pomocniczych, które pozwalają odizolować elementy specyficzne dla danej przeglądarki. Gdy tylko zakończysz obsługę przeglądarki w systemie Android 4.4, możesz usunąć tę część i zachować nazwy standardowe.

function getHiddenProp(){
    var prefixes = ['webkit','moz','ms','o'];

    // if 'hidden' is natively supported just return it
    if ('hidden' in document) return 'hidden';

    // otherwise loop over all the known prefixes until we find one
    for (var i = 0; i < prefixes.length; i++){
        if ((prefixes[i] + 'Hidden') in document)
            return prefixes[i] + 'Hidden';
    }

    // otherwise it's not supported
    return null;
}

Przykład właściwości dokumentu

Teraz możemy napisać funkcję isHidden() obejmującą różne przeglądarki, aby sprawdzić, czy dokument jest widoczny.

function isHidden() {
    var prop = getHiddenProp();
    if (!prop) return false;

    return document[prop];
}

Aby uzyskać bardziej szczegółowy widok widoczności dokumentu, możesz użyć właściwości activityState. Ta właściwość zwraca jedną z czterech wartości:

  • hidden: dokument jest całkowicie ukryty.
  • visible: dokument jest co najmniej częściowo widoczny na co najmniej jednym urządzeniu displayowym.
  • prerender: dokument jest wczytywany poza ekranem i nie jest widoczny (ta wartość jest opcjonalna i nie wszystkie przeglądarki ją obsługują).
  • unloaded: jeśli dokument ma zostać wyładowany, ta wartość jest zwracana (ta wartość jest opcjonalna i nie wszystkie przeglądarki ją obsługują).

Zdarzenie zmiany widoczności

Oprócz właściwości widoczności istnieje zdarzenie zmiany widoczności, które jest uruchamiane przy każdej zmianie stanu widoczności dokumentu. Możesz zarejestrować detektor zdarzeń dla tego zdarzenia bezpośrednio w obiekcie dokumentu:

Przykład zdarzenia

// use the property name to generate the prefixed event name
var visProp = getHiddenProp();
if (visProp) {
  var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
  document.addEventListener(evtname, visChange);
}

function visChange() {
   var txtFld = document.getElementById('visChangeText');

   if (txtFld) {
      if (isHidden())
         txtFld.value += "Tab Hidden!\n";
      else
         txtFld.value += "Tab Visible!\n";
   }
}

Podsumowanie

Tworzenie świetnej aplikacji internetowej nie ogranicza się tylko do korzystania z ciekawych, przyciągających uwagę funkcji, które użytkownicy mogą zobaczyć i z nich korzystać. Naprawdę świetna aplikacja wymaga przemyślanego wykorzystania zasobów i uwagi użytkownika, a interfejs API widoczności strony jest ważnym elementem tej układanki. Aby dowiedzieć się więcej o tworzeniu aplikacji internetowych uwzględniających zasoby, przeczytaj nasze inne artykuły na temat wydajności.

Źródła zewnętrzne