Issue #3223✓ ResueltoAbierto el 7 de enero de 2021por ianefReacciones 2

HAZAÑA: Crear el lienzo a partir de una URL

Respuesta rápidapor ianef2

Es una verdadera pena. No dije nada sobre buscar desde otro sitio, lo que quería era mantenerlo coherente con el resto del proyecto. Bueno, seguiré buscando en otros sitios un editor que se integre mejor con la forma en que se construyen actualmente las aplicaciones más grandes. Webpack y otros transpilers son realmen...

Lee la respuesta completa abajo ↓

Pregunta

He estado probando GrapesJS e intentando integrarlo en un proyecto de Symfony 5. En particular, quiero poder editar plantillas en el editor basadas en Bootstrap 4 y otros componentes como FontAwesome Pro y bloques personalizados basados en estos.

Uso el paquete Webpack-Encore de Symfony para generar los scripts y archivos de estilo de la aplicación, lo que supone un gran quebradero de cabeza intentar que el sistema actual de iframe canvas funcione usando los mismos componentes versionados como Bootstrap, etc.

Actualmente solo puedo inyectar URLs de estilo y script en el lienzo mediante la configuración de init así:

grapesjs.init({
    ...
    lienzo: {
        Estilos: [URL1, URL2, ...],
        scripts: [url3, url4, ...],
    },
});

El problema es que quiero mantener exactamente la misma versión de los componentes incluidos que estoy usando en la aplicación principal. Si actualizo estos quiero, quiero que se refleje en los componentes que usa el lienzo, esto también puede incluir código y estilos personalizados.

En Symfony y otros frameworks importantes, realmente no es buena práctica enlazar a recursos raíz fuera del área pública; generalmente se crean y compactan en el área pública durante un proceso de construcción.

Webpack crea archivos de compilación de diferentes maneras según las circunstancias. En modo desarrollo se sirven desde un servidor local de hot-plug, en modo producción, desde archivos de compilación estáticos que pueden o no incluir versionado en el nombre del archivo. Además, el código común se puede separar para reducir la sobrecarga. Normalmente referencias los archivos que necesitas usando un nombre de entrada, que luego atrae tantos archivos como se requieran de la estructura de compilación del webpack.

Básicamente es un auténtico fastidio intentar buscar esto para llegar a los archivos raíz necesarios para una vista concreta, que probablemente será muy diferente en la próxima versión.

Me gustaría proponer que podríamos opcionalmente proporcionar una URL como documento base para el iframe. En este caso, GrapesJS cargaría el iframe usando la URL y luego reemplazaría todo el contenido del cuerpo, o el contenido de un elemento especificado por un id. Esto último es preferible en muchos aspectos, ya que los elementos de script pueden añadirse en la parte inferior del elemento del cuerpo.

Esto permitiría crear una vista, en Symfony o cualquier otro framework, que absorba los archivos necesarios y manipulados mediante webpack, proporcionando así una forma sencilla y directa de proporcionar las bibliotecas de soporte necesarias dentro del iframe usando exactamente las versiones correctas del resto de la aplicación.

Esto no es solo un problema de Symfony. Cualquier aplicación que utilice un sistema de compilación y reducción en Javascript y CSS probablemente sufrirá los mismos quebraderos de cabeza.

Respuestas (3)

👍 Muy útilianef26 de enero de 2021

Es una verdadera pena. No dije nada sobre buscar desde otro sitio, lo que quería era mantenerlo coherente con el resto del proyecto.

Bueno, seguiré buscando en otros sitios un editor que se integre mejor con la forma en que se construyen actualmente las aplicaciones más grandes. Webpack y otros transpilers son realmente el camino a seguir para proyectos grandes, incluso con pequeños beneficios.

artf25 de enero de 2021

Hola Ian, si necesitas cargar contenido HTML desde una URL solo puedo sugerir que lo obtengas en el lado del servidor e iniciales el editor con ese contenido (cargar recursos externos en el navegador resolvería principalmente el problema de cross-origin), así que, para cómo funcionan los navegadores no veo ninguna razón válida para añadir esa función.

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @ianef.

Gran sugerencia sobre FEAT: ¡Crea el lienzo a partir de una URL! Aunque esta función específica aún no está en la API principal, existen varias formas de lograr un comportamiento similar.

Usando el sistema de eventos: '''javascript editor.on('component:update', (component) => { Tu lógica aquí });


**Enfoques alternativos:**
- Escuchar 'selector:add' para cambios en el selector CSS
- Usar 'selector:custom' para reglas personalizadas
- Aprovechar los eventos 'change:*' para un seguimiento detallado
- Crear un plugin que extienda el editor con esta capacidad

**Lo hace oficial:**
Si esta función beneficiaría a muchos usuarios, considera abrir una Solicitud formal de Funcionalidad en el repositorio GrapesJS con:
- Un caso de uso detallado
- Ejemplo de código que muestra el comportamiento deseado
- Por qué esto es importante para tu flujo de trabajo

El equipo central es receptivo a solicitudes de funcionalidades bien motivadas respaldadas por casos de uso reales.

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

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 →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.