AYUDA / SOLUCIÓN DE PROBLEMAS
Solución de problemas
Empieza por la fase que falla y conserva el mensaje de p2lrn:error. No desactives integridad para ocultar un síntoma.
Player no carga
- 1.Comprueba que
/player/current/dist/p2lrn.jsresponde. - 2.Ejecuta
customElements.get('p2lrn-player'). - 3.Comprueba
srcy Network. - 4.Escucha
p2lrn:error. - 5.Si el paquete abre pero no renderiza, revisa presentación o entorno de ejecución.
CORS
Síntoma: la petición al paquete o a una parte externa falla antes de que el Player pueda verificarla. Comprueba el origen de la aplicación, la respuesta OPTIONS cuando exista preflight y Access-Control-Allow-Origin. * sólo abre lectura cross-origin; no autoriza a un usuario.
Error de integridad de contentRoot o digest
El paquete, graph o payload cambió después de calcular integridad o llegó corrupto. Vuelve a generar o recuperar el artefacto correcto. No edites manualmente el digest para que coincida.
Presentación no disponible
Consulta P2LRN.renderizadors(). Si fijaste renderizador, verifica que su id exista y que acepte profile/mediaType/ubicación de la representación. El Player sólo hace fallback en categorías de incompatibilidad previstas.
Multipart: falta una parte
El descriptor usa href relativos al .p2lrn. Verifica que todas las .partNNN se publiquen junto al paquete y no se renombren. Si una parte existe pero cambia, su SHA-256 debe fallar.
HTTP Range
El Player puede abrir paquetes remotos por rangos. Si el servidor no soporta el patrón esperado, revisa respuestas 206, Content-Range y límites de proxy/CDN. El transporte actual puede cambiar a lectura completa cuando no dispone de range.
El runtime configurado comparte origen con la aplicación
SCORM y H5P: el Player cambia automáticamente al sandbox interno de origen opaco. No necesitas crear otro dominio sólo para reproducir estos contenidos.
Runtime administrado o paquete ejecutable genérico: si has configurado runtime-base-url expresamente para un entorno que exige otro origen, utiliza un dominio, subdominio o puerto diferente. Una ruta diferente en el mismo origen no constituye aislamiento.
Falta una librería H5P
El sandbox automático intenta completar las dependencias que no estén dentro del .h5p utilizando el catálogo runtime-host/h5p-libraries/index.json situado junto al Player. Comprueba que ese corpus se publica junto con los assets del runtime. Si utilizas el runtime Node opcional, comprueba también el directorio de librerías configurado en ese servicio.
SCORM no arranca
Comprueba que el punto de entrada SCORM existe dentro del paquete y que el navegador permite el iframe sandbox. Si el runtime configurado comparte origen con la aplicación, el Player utiliza automáticamente el sandbox interno en lugar de exigir otro servidor.
No llega el evento de finalización
El contrato actual del Player usa p2lrn:complete, no p2lrn:completion. Para estado usa p2lrn:statechange; para cambios de progresión usa p2lrn:progressionchange. Verifica además que el renderizador concreto emita ese evento.
Fallo al guardar progreso
Si Host Adapter.saveState() falla, el Player emite p2lrn:error con fase progression-save. El estado de alumno pertenece al Host; no intentes escribirlo dentro del paquete.
Diagnóstico rápido
Ejecuta estas comprobaciones en la consola cuando necesites distinguir rápidamente entre un problema de carga, montaje del Player o disponibilidad de la API.
const player = document.querySelector('p2lrn-player');
player.addEventListener('p2lrn:error', (event) => {
console.error(event.detail);
});
console.table(P2LRN.renderizadors());
console.log(P2LRN.version, P2LRN.toolkitVersion);¿Sigue fallando?
Incluye URL del paquete, evento p2lrn:error y fase del fallo.