2013-05-04 21 views
6

Sto provando a creare un pulsante che attiva/disattiva lo schermo HTML5 a schermo intero su un determinato sito Web.HTML5 API FullScreen con JavaScript

Dopo aver letto un sacco di documentazione, sembra che ci siano ancora alcune incongruenze tra il modo in cui i browser trattano certe proprietà per esso.

Sono andato per tipo di approccio "cross-browser" che fa funziona in Firefox e Safari/MacOS, funziona parzialmente in Safari/Windows e completamente non riesce a funzionare in Chrome e Opera.

alcuni frammenti di codice castrati:

// 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); 
} 

risposta

4

Modifica della prima linea di _isFullScreen funzione per

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

fa il trucco (almeno per Firefox, Chrome e Safari su Mac e Windows)

+0

Almeno in FF24, è mozFullScreenEnabled (schermo con maiuscole) – Narretz

+1

Inoltre, _isFullScreen restituisce se un browser è in grado di visualizzare a schermo intero, non se a schermo intero è attualmente attivo. È necessario ascoltare document.fullscreenElement e le varianti del browser per questo. – Narretz

0

In base a quanto I found on Mozilla's Developer Network la funzione per Webkit è in realtà scritto leggermente diverso.

document.webkitRequestFullscreen con una "s" minuscola per schermo.

E from W3 spec, è pensato per essere con una "s" minuscola.

sul link MDN dicono:

Nota: La specifica utilizza l'etichetta, "a tutto schermo", come in "requestFullscreen" o "fullscreenEnabled" - senza 's' maiuscola. L'implementazione descritta qui e altre implementazioni prefissate possono utilizzare una "S" maiuscola.

+0

Grazie per il vostro sforzo. Credo di essere stato lì prima, ma non è questo il problema principale qui; Safari/Mac riesce ancora a lanciare a schermo intero senza problemi. Quello che ho appena controllato è che Chrome risponde 'true' a' document.webkitFullscreenEnabled' anche se non siamo nella visualizzazione a schermo intero. Qualche indizio? :) – kyeno

+0

Alcuni dei giochi nella console di Chrome mi mostrano che l'oggetto 'document' in realtà non ha la funzione' webkitRequestFullscreen', tuttavia 'document.documentElement' lo fa. Mentre ancora non riuscivo a farlo funzionare ancora, ho pensato che potrei dirlo. – Turnerj

+0

Sembra che potrebbero esserci alcuni indizi vitali: http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ Andare a provarlo ora. – kyeno

3

Click Handler:

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

Funzione:

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

    rfs.call(el); 
} 

Tenete a mente che la richiesta fullScreen deve essere fatto tramite un evento utente-triggered ad esempio un evento click-mousedown, mouseup ecc ..