2015-12-22 17 views
5

TLDR;Jak wykryć przeglądarkę przeszła na pełny ekran

Mogę wykryć, czy przeglądarka przeszła na pełny ekran przez pełny ekran API, ale nie mogę wykryć, że przeglądarka przeszła na pełny ekran poprzez f11 lub menu przeglądarki (konkretnie chrome).

oryginalny:

Obecnie używam screenfull aby przejść do pełnego ekranu i wykryć, że przeglądarka jest na pełnym ekranie. Problem polega na tym, że nie chcę wyświetlać przycisku przełączania na pełnym ekranie, gdy przeglądarka przeszła na pełny ekran za pośrednictwem funkcji przeglądarki (np. F11 lub pełny ekran w menu przeglądarki). Dzieje się tak dlatego, że interfejs API pełnego ekranu javascript nie jest w stanie wykryć, że jesteś na pełnym ekranie lub możesz wyjść z trybu pełnoekranowego, gdy przejdziesz tam przez funkcję przeglądarki. Mogłem po prostu wykryć, czy f11 zostało trafione, ale to nie działa na Macu lub gdy w menu przeglądarki zainicjowano pełny ekran.

Wszelkie pomysły dotyczące wykrywania, czy pełny ekran został uruchomiony za pomocą funkcji przeglądarki? Celuję tylko w przeglądarki kompatybilne z webgl, dzięki czemu zmniejszam liczbę kuponów.

+4

Możliwy duplikat [Wykrywanie jeśli przeglądarka jest w trybie pełnoekranowym] (http://stackoverflow.com/questions/1047319/detecting- jeśli-przeglądarka-jest-w-pełnym-trybie-ekranu) – thanksd

+0

http://stackoverflow.com/questions/5617963/how-to-detect-if-user-has-enabled-full-screen-in-browser –

+0

Mogę wykryć, czy przeglądarka przeszła do trybu pełnoekranowego z poziomu pełnoekranowego interfejsu API, ale nie mogę wykryć, czy przeglądarka przeszła do trybu pełnoekranowego z poziomu f11, czy menu paska narzędzi. – Tbonebrad

Odpowiedz

5

Nie testowałem tego pod kątem niezawodności, ale to jest moje podejście.

//without jQuery 
window.addEventListener('resize', function(){ 
    if(screen.width === window.innerWidth){ 
    // this is full screen 
    } 
}); 


    //with jQuery 
$(document).ready(function() { 
    $(window).on('resize', function(){ 
    if(screen.width === window.innerWidth){ 
     // this is full screen 
    } 
    }); 
}); 

To wydaje się działać po naciśnięciu przycisku F11 i innych metod, więc należy go złapać przypadki brzegowe, że pełne API ekran nie. Chociaż nie jestem pewien, czy porównanie ekranu screen.width vs. window.innerWidth jest niezawodnym sposobem sprawdzenia pełnego ekranu. Może ktoś inny może to dodać/skrytykować.

+2

Nie wystarczy porównać szerokość, to jest to samo, gdy okno jest zmaksymalizowane. Trzeba też porównywać wysokości, ale zabawa zaczyna się tutaj. W trybie pełnoekranowym Chrom, wysokość ekranu i wysokość okna są takie same, w IE nie jest to spowodowane paskiem stanu.Nie próbowałem używać firefox, ale pasek stanu można dodać z rozszerzeniem. Na pełnym ekranie wysokość okna powinna być mniejsza niż x% mniejsza niż rozmiar ekranu. – Shanoor

+0

@ShanShan Widzę twój punkt, chociaż mam pytanie. OP szukał przypadków, w których pełny ekran został osiągnięty poprzez naciśnięcie klawisza "F11" lub funkcji przeglądarki. Jeśli się nie mylę, czy pasek stanu nie jest skompresowany, gdy przechodzę na pełny ekran w ten sposób? –

+0

IE zawsze pokazuje pasek stanu nawet na pełnym ekranie (próbowałem kilka minut temu), chyba że całkowicie go wyłączyć. I próbowałem też w firefoxie, istnieje różnica w pikselach. To rozwiązanie jest dobrym początkiem, wymaga tylko kilku poprawek i testów. – Shanoor

3

Użyj zdarzenia fullscreenchange do wykrycia zdarzenia zmiany pełnoekranowego lub jeśli nie chcesz obsługiwać prefiksów dostawcy, możesz również odsłuchać zdarzenie resize (zdarzenie zmiany rozmiaru okna, które jest również wyzwalane po wprowadzeniu lub zamknięciu trybu pełnoekranowego) i następnie sprawdź, czy document.fullscreenElement nie jest pusta, aby określić, czy tryb pełnoekranowy jest włączony. Musisz odpowiednio podać prefiks dostawcy fullscreenElement. Chciałbym użyć coś takiego:

var fullscreenElement = document.fullscreenElement || document.mozFullScreenElement || 
document.webkitFullscreenElement || document.msFullscreenElement; 

https://msdn.microsoft.com/en-us/library/dn312066(v=vs.85).aspx ma dobry przykład na to, który cytuję poniżej. Zostały one wykorzystane zdarzenie fullscreenChange, ale można wykrywać zdarzenie "resize"

document.addEventListener("fullscreenChange", function() { 
      if (fullscreenElement != null) { 
       console.info("Went full screen"); 
      } else { 
       console.info("Exited full screen");    
      } 
     }); 
+2

To nie działa tak jak "fullscreenChange" Zdarzenie uruchamia się tylko wtedy, gdy wywołasz pełny interfejs JavaScript API HTML5. Jeśli użytkownik natrafi na F11, to zdarzenie nie zostanie wywołane, a "document.fullscreenElement" (i wersje prefiksu dostawcy) pozostaną "null". – mc10