2013-05-04 19 views
6

Próbuję zrobić przycisk, który przełączy (wł/wył) pełny ekran HTML5 na określonej stronie internetowej.Interfejs API HTML5 FullScreen z JavaScriptem

Po przeczytaniu dużej dokumentacji, wydaje się, że nadal istnieją pewne niespójności między sposobami traktowania przeglądarek przez określone właściwości.

Poszedłem na coś w stylu "przeglądarki", które działa w Firefoksie i Safari/MacOS, działa częściowo w Safari/Windows i zupełnie nie działa w Chrome i Operze.

Niektóre wykastrowane fragmenty kodu:

// class init 
initialize: function() { 

    this.elmButtonFullscreen = $('fullscreen'); 
    this.elmButtonFullscreen.on('click', this.onClickFullscreen.bindAsEventListener(this)); 
}, 

// helper methods 
_launchFullScreen: function(element) { 

    if(element.requestFullScreen) { element.requestFullScreen(); } 
    else if(element.mozRequestFullScreen) { element.mozRequestFullScreen(); } 
    else if(element.webkitRequestFullScreen) { element.webkitRequestFullScreen(); } 
}, 
_cancelFullScreen: function() { 

    if(document.cancelFullScreen) { document.cancelFullScreen(); } 
    else if(document.mozCancelFullScreen) { document.mozCancelFullScreen(); } 
    else if(document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } 
}, 
_isFullScreen: function() { 

    fullScreen = document.fullscreenEnabled || document.mozFullscreenEnabled || document.webkitFullscreenEnabled ? true : false; 
    if(this.debug) console.log('Fullscreen enabled? ' + fullScreen); 
    return fullScreen; 
}, 

// callbacks 
onClickFullscreen: function(e) { 

    e.stop(); 
    if(this._isFullScreen()) this._cancelFullScreen(); 
    else this._launchFullScreen(document.documentElement); 
} 

Odpowiedz

4

Zmiana 1st linię _isFullScreen funkcji do

fullScreen = document.fullscreenEnabled || document.mozFullscreenEnabled || document.webkitIsFullScreen ? true : false; 

załatwia sprawę (przynajmniej dla Firefox, Chrome i Safari na Mac i Windows)

+0

Przynajmniej w FF24, jest to mozFullScreenEnabled (ekran z kapitałem s) – Narretz

+1

Również nie, to jest _isFullScreen powraca, jeśli przeglądarka jest w stanie wyświetlać pełnoekranowy, a nie jeśli pełny ekran jest aktywny. Musisz posłuchać document.fullscreenElement i wariantów przeglądarki. – Narretz

0

podstawie tego, co I found on Mozilla's Developer Network funkcja dla Webkit jest rzeczywiście pisane nieco inaczej.

document.webkitRequestFullscreen z małymi literami "s" dla ekranu.

I from W3 spec, to znaczy, że ma małe litery "s".

odnośnik MDN mówią:

Uwaga: specyfikacja używa etykiety „Pełny ekran”, jak w „requestFullscreen” lub „fullscreenEnabled” - bez kapitału „S”. Opisana tutaj implementacja i inne prefiksowane implementacje mogą wykorzystywać duże "S".

+0

Dzięki za twój wysiłek. Wierzę, że byłem tam wcześniej, ale to nie jest główny problem; Safari/Mac nadal może bez problemu uruchomić pełnoekranowy ekran. Właśnie sprawdziłem, czy Chrome odpowiada 'true' na' document.webkitFullscreenEnabled', nawet jeśli nie jesteśmy w widoku pełnoekranowym. Jakieś wskazówki? :) – kyeno

+0

Niektóre zabawy w Konsoli Chrome pokazują mi, że obiekt 'document' nie ma faktycznie funkcji' webkitRequestFullscreen', jednak działa 'document.documentElement'. Chociaż nadal nie mogłem go uruchomić, pomyślałem, że mogę o tym wspomnieć. – Turnerj

+0

Wygląda na to, że mogą istnieć ważne wskazówki: http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ Przejdę do przetestowania teraz. – kyeno

3

Kliknij Handler:

$("#toolFullScreen").click(function() { 
    goFullScreen(); 
}); 

Funkcja:

function goFullScreen() { 
    var el = document.documentElement, 
     rfs = el.requestFullScreen 
     || el.webkitRequestFullScreen 
     || el.mozRequestFullScreen 
     || el.msRequestFullscreen; 

    rfs.call(el); 
} 

Należy pamiętać, że zainteresowanie fullScreen należy zrobić poprzez zdarzenia wywoływane przez użytkownika, takich jak imprezy click - mousedown, mouseup etc ..

Powiązane problemy