Ejecutar en modo sin cabeza requiere ventana
Pregunta
Versión GrapesJS
- Confirmo que se debe usar la última versión de GrapesJS
¿Qué navegador usas?
Chrome 103.0.5060.134
Enlace de demo reproducible
https://stackblitz.com/edit/node-zrdtg4?file=index.js
Describe el bicho
¿Cómo reproducir el bicho?
- Inicializar el editor en modo sin interfaz
- Cargar los datos del proyecto solo con un nodo de texto básico
'''javascript const _justTextData = { Activos: [], Estilos: [], páginas: [ { Frames: [ { component: { Tipo: 'envoltorio', estilizado: [ 'trasfondo', 'color de fondo', 'imagen de fondo', 'repetición de fondo', 'vínculo de fondo', 'posición de fondo', 'tamaño de fondo', ], Atributos: { ID: 'IPFO' }, Componentes: [ { Tipo: 'texto', Atributos: { ID: 'i1je' }, components: [{ type: 'textnode', content: '¡Hola mundo!' }], }, ], }, }, ], id: '7bbomSfhvWF8QvfD', }, ], };
</details>
Código de ejemplo
try { editor const = grapesjs.init({ headless: true });
editor.loadProjectData(_justTextData); const html = editor.getHtml(); const css = editor.getCss();
console.log('html:', html); console.log('css:', css); } captura (e) { console.log('error', e); }
3. Generar el HTML y el CSS usando 'editor.getHtml()' y 'editor.getCss()' respectivamente.
4. HTML y CSS deberían generarse con éxito.
5. Ahora carga el proyecto con datos que contengan texto e imagen
<details>
<summary>Haz clic para ampliar y ver los datos de muestra.</summary>
'''javascript
const _textWithImageData = {
Activos: [
{
tipo: 'imagen',
src: 'https://images.unsplash.com/photo-1658397966058-d1d252892754?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=764&q=80',
unitDim: 'px',
altura: 0,
Ancho: 0,
},
],
Estilos: [
{
Seleccionadores: ['#ifvh'],
estilo: { color: 'negro' },
mediaText: '(ancho máximo: 900px)',
atRuleType: 'media',
},
],
páginas: [
{
Frames: [
{
component: {
Tipo: 'envoltorio',
estilizado: [
'trasfondo',
'color de fondo',
'imagen de fondo',
'repetición de fondo',
'vínculo de fondo',
'posición de fondo',
'tamaño de fondo',
],
Atributos: { ID: 'ih1q' },
Componentes: [
{
Tipo: 'texto',
Atributos: { ID: 'i29T' },
componentes: [{ type: 'textnode', content: 'Hello World' }],
},
{
tipo: 'imagen',
atributos: {
id: 'IFVH',
src: 'https://images.unsplash.com/photo-1658397966058-d1d252892754?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=764&q=80',
},
},
],
},
},
],
id: '9T0c4L1n3IPynJMc',
},
],
};
</details>
6. Generar HTML y CSS
¿Cuál es el comportamiento esperado? Por lo que entiendo, ejecutar en modo headless no debería requerir acceso a ventanas o documentos, así que en teoría HTML y CSS deberían generarse en ambos casos.
¿Cuál es el comportamiento actual? HTML y CSS se generan en el primer caso, pero no en el segundo, y generan un error.
error ReferenciaError: ventana no está definida
at U (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:893064)
at N.r.initialize (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:794563)
en el nuevo e.Model (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:10599)
en N.r.eval (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:455301)
en new n (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:455545)
en N.r.eval (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:408184)
en N.r.n (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:408590)
en new N.r (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:28357)
A nuevo valor (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:440096)
en n._prepareModel (/home/projects/node-zrdtg4/node_modules/grapesjs/dist/grapes.min.js:2:18706)
Lo mismo ocurre al añadir un bloque de vídeo, pero solo en este caso el error es que 'documento no está definido `
Código de conducta
- Acepto seguir el Código de Conducta de este proyecto
Respuestas (3)
véase #4473
Gracias por informar de esto, @bimsina.
Buena pregunta sobre Correr en modo sin cabeza requiere ventana. El enfoque recomendado con StyleManager es usar la API orientada a eventos.
Empieza aquí:
- Consulta la documentación de GrapesJS de tu módulo específico
- Busca el método del oyente de eventos 'on()'
- La mayoría de las operaciones se pueden realizar escuchando eventos del editor y de los componentes
Patrones comunes: '''javascript Prestad atención a los cambios editor.on('Change', () => console.log('Something Changed'));
Ciclo de vida de los componentes editor.on('component:mount', (c) => console.log('component ready', c)); editor.on('component:update', (c) => console.log('component updated', c));
**Si sigues atascado:**
- Compartir una reproducción mínima de CodeSandbox
- Incluye lo que ya has probado
- Menciona tu versión GrapesJS
- ¡La comunidad está aquí para ayudar!
Preguntas y respuestas relacionadas
Continúa investigando con debates sobre temas similares.
Issue #5274
Error de análisis dentro de Remix
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome v114 Enlace de demo reproducible h...
Issue #4196
El IDS cambia al intentar configurar componentes en el lienzo usando json
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome Enlace de demo reproducible sin en...
Issue #6096
La caja redimensionable desaparece al volver a seleccionar componentes
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome Enlace de demo reproducible https:...
Issue #5990
Cuando eliminas un componente, las clases duplicadas entre componentes se eliminan.
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome 126.0.6478.127 (Windows) Enlace de...
Plugins de pago que cumplen con este problema
Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.
Cargando recomendaciones de plugins de pago...
Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.
Explora plugins gratuitos →Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.
Explora plugins premium →Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.