2013-05-04 3 views
6

J'essaye de faire un bouton qui permuterait (on/off) HTML5 en plein écran sur un certain site Web. Après avoir lu beaucoup de documentation, il semble qu'il y ait encore des incohérences dans la façon dont les navigateurs traitent certaines propriétés pour cela.HTML5 FullScreen API basculer avec JavaScript

Je suis allé pour une sorte de "cross-browser" approche fonctionne dans Firefox et Safari/MacOS, fonctionne partiellement dans Safari/Windows et échoue totalement à travailler dans Chrome et Opera.

Quelques extraits de code castrés:

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

Répondre

4

Modification de la 1ère ligne de _isFullScreen fonction

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

le tour est joué (au moins pour Firefox, Chrome et Safari sur Mac et Windows)

+0

Au moins en FF24, c'est mozFullScreenEnabled (écran avec majuscule s) – Narretz

+1

Également pas, c'est _isFullScreen qui retourne si un navigateur est capable d'afficher plein écran, pas si plein écran est actuellement actif. Vous devez écouter document.fullscreenElement et les variantes du navigateur pour cela. – Narretz

0

Sur la base de ce I found on Mozilla's Developer Network la fonction pour Webkit est effectivement orthographié légèrement différente.

document.webkitRequestFullscreen avec un "s" minuscule pour l'écran.

Et from W3 spec, il est destiné à être avec un "s" minuscule.

Sur le lien ils disent MDN:

Note: La spécification utilise l'étiquette, "Fullscreen" comme dans "requestFullscreen" ou "fullscreenEnabled" - sans 'd' un capital. L'implémentation décrite ici et d'autres implémentations préfixées peuvent utiliser un «S» majuscule.

+0

Merci pour vos efforts. Je crois que j'y étais déjà allé, mais ce n'est pas le problème principal ici; Safari/Mac parvient toujours à lancer le plein écran sans problèmes. Ce que je viens de vérifier, c'est que Chrome répond 'true' à' document.webkitFullscreenEnabled' même si nous ne sommes pas en mode plein écran. Des indices? :) – kyeno

+0

Certains jeux dans la console Chrome me montrent que l'objet 'document' n'a pas la fonction' webkitRequestFullscreen', mais 'document.documentElement' le fait. Même si je ne pouvais toujours pas le faire fonctionner, j'ai pensé que je pourrais le mentionner. – Turnerj

+0

On dirait qu'il pourrait y avoir quelques indices vitaux: http://johndyer.name/native-fullscreen-javascript-api-plus-jquery-plugin/ Va le tester maintenant. – kyeno

3

Cliquez Handler:

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

Fonction:

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

    rfs.call(el); 
} 

Gardez à l'esprit que la demande fullScreen a besoin d'être fait par un événement déclenché par l'utilisateur comme un événement click -mousedown, etc .. mouseup