validacion - La pantalla completa de solicitud de Javascript no es confiable
validar formulario javascript html5 (4)
No tiene nada malo con su función. En Firefox, si llama a esa función directamente, evitará que aparezca en pantalla completa. Como ya sabe, se denegó la solicitud de pantalla completa porque docElm.mozRequestFullScreen (); no se ha llamado desde dentro de un controlador de eventos generado por el usuario de ejecución corta. Entonces, tienes que llamar a la función en evento como onClick en Firefox.
<a href="#" onClick="DoFullScreen()">Full Screen Mode</a>
Estoy intentando usar la API de JavaScript FullScreen, usando soluciones provisionales para implementaciones actuales no estándar desde aquí:
https://developer.mozilla.org/en/DOM/Using_full-screen_mode#AutoCompatibilityTable
Lamentablemente, se comporta de manera muy errática. Solo me importa Chrome (usando v17), pero como tenía problemas realicé algunas pruebas en Firefox 10 para comparar, los resultados son similares.
El siguiente código intenta configurar el navegador a pantalla completa, a veces funciona, a veces no. SIEMPRE llama a la alerta para indicar que está solicitando pantalla completa. Esto es lo que he encontrado:
- LO GENERALMENTE establece pantalla completa. Puede llegar a un estado en el que deja de funcionar, pero la alerta sigue ocurriendo, es decir, sigue solicitando FullScreen, pero no funciona.
- Puede funcionar si se llama desde un controlador de pulsación de tecla (document.onkeypress), pero no cuando se solicita en la carga de la página (window.onload).
Mi código es el siguiente:
function DoFullScreen() {
var isInFullScreen = (document.fullScreenElement && document.fullScreenElement !== null) || // alternative standard method
(document.mozFullScreen || document.webkitIsFullScreen);
var docElm = document.documentElement;
if (!isInFullScreen) {
if (docElm.requestFullscreen) {
docElm.requestFullscreen();
}
else if (docElm.mozRequestFullScreen) {
docElm.mozRequestFullScreen();
alert("Mozilla entering fullscreen!");
}
else if (docElm.webkitRequestFullScreen) {
docElm.webkitRequestFullScreen();
alert("Webkit entering fullscreen!");
}
}
}
Otro problema inesperado con requestFullscreen()
es que los marcos principales deben tener el atributo allowfullscreen
, de lo contrario, Firefox emite el siguiente error:
La solicitud de pantalla completa fue denegada porque al menos uno de los elementos que contiene el documento no es un iframe o no tiene un atributo "allowfullscreen".
Aparte de los iframes, esto puede deberse a que su página se encuentra dentro de un marco de frameset
marcos. Debido a que el frameset
está en desuso, no hay soporte para el atributo allowfullscreen
HTML5, y la llamada requestFullscreen()
falla.
La documentación de Firefox lo dice explícitamente en MDN, pero creo que vale la pena reiterarlo aquí, para desarrolladores que quizás no lean la documentación primero ... ejem.
Solo los elementos en el documento de nivel superior o en un con el atributo allowfullscreen pueden mostrarse a pantalla completa. Esto significa que los elementos dentro de un
frame
o unobject
no pueden.
Sé que esta es una pregunta bastante antigua, pero sigue siendo el resultado principal en Google cuando se busca el mensaje de error de FireFox cuando se llama a mozRequestFullScreen()
desde un código que no fue activado por ninguna interacción del usuario.
Se denegó la solicitud de pantalla completa porque no se llamó a Element.mozRequestFullScreen () desde dentro de un controlador de eventos generado por el usuario de ejecución corta.
Como ya se discutió, esta es una configuración de seguridad y, por lo tanto, es el comportamiento correcto en el entorno normal del navegador (máquina del usuario final).
Pero estoy escribiendo una aplicación de señalización digital basada en HTML5 que se ejecuta en un entorno controlado sin la intención de interacción del usuario. Es vital para mi aplicación poder cambiar a pantalla completa automáticamente.
Afortunadamente, FireFox ofrece la posibilidad de eliminar esta restricción en el navegador, que es bastante difícil de encontrar. Lo escribiré aquí como futura referencia para todos los que encuentren esta página a través de la búsqueda de Google como lo hice
En la página about:config
busque la siguiente clave y configúrela como falsa
full-screen-api.allow-trusted-requests-only
Para mi aplicación de señalización digital, también eliminé el mensaje que el navegador muestra al ingresar a fullscren:
full-screen-api.approval-required
Espero que esto pueda salvar a alguien las horas que desperdicié para encontrar estas configuraciones.
requestFullscreen()
no se puede llamar automáticamente debido a razones de seguridad (al menos en Chrome). Por lo tanto, solo puede ser llamado por una acción del usuario como:
- clic (botón, enlace ...)
- clave (keydown, keypress ...)
Y si su documento está contenido en un marco:
-
allowfullscreen
debe estar presente en el elemento<iframe>
*
* Especificación W3:
"... Para evitar que el contenido incrustado pase a pantalla completa, solo el contenido incrustado específicamente permitido a través del atributoallowfullscreen
del elementoiframe
HTML podrá ir a pantalla completa. Esto evita que el contenido no confiable pase a pantalla completa ..."
Leer más: W3 Spec en pantalla completa
También mencionado por @abergmeier , en Firefox su solicitud de pantalla completa debe ejecutarse dentro de 1 segundo después de que se haya @abergmeier el evento generado por el usuario.