Issue #3413💬 RespondidoAbierto el 26 de abril de 2021por theSC0RPReacciones 0

Añadir scripts en línea y actualizar eventos antiguos

Respuesta rápidapor theSC0RP

Intenté actualizar el script en línea siguiendo los siguientes pasos:Obtener el documento del iframe: 'iframeDoc = editor. Canvas.getDocument()'Obtener el innerHTML del cuerpo del documento: 'iframeDocBodyHtml = iframeDoc.body.innerHTML'Sustituir el innerHTML del cuerpo: 'iframeDoc.body.innerHTML = iframeDocBodyHtml'R...

Lee la respuesta completa abajo ↓

Pregunta

En ese caso, te sugiero que accedas al documento del iframe y añadas manualmente el script en línea (para conseguir el documento usa 'editor. Canvas.getDocument()')

Originally publicado por @artf en https://github.com/artf/grapesjs/issues/2012#issuecomment-496304498

Hola, @artf, estaba pasando por el número #2012 y tengo una duda. Si se hace un cambio en el script, por ejemplo, un cambio en la alerta, haz clic en el mensaje de alerta. Luego se añaden varios eventos. Cómo eliminar los eventos antiguos y añadir otros nuevos (sin guardar ni recargar). Una forma es actualizar el iframe, pero eso lleva a la pérdida de todos los eventos (incluso los predefinidos). ¿Cómo sugerirías hacer esto?

Respuestas (4)

theSC0RP27 de abril de 2021

Intenté actualizar el script en línea siguiendo los siguientes pasos:

  • Obtener el documento del iframe: 'iframeDoc = editor. Canvas.getDocument()'
  • Obtener el innerHTML del cuerpo del documento: 'iframeDocBodyHtml = iframeDoc.body.innerHTML'
  • Sustituir el innerHTML del cuerpo: 'iframeDoc.body.innerHTML = iframeDocBodyHtml'
  • Reconectar el script en línea

Hacer esto lleva a la pérdida de los eventos incorporados de grapesjs como el hover o la selección de componentes (esto es obvio porque todos los eventos se pierden). ¿Hay alguna forma de volver a conectar estos eventos de uvas? También intenté hacer 'editor'. Canvas.toggleFramesEvents(1)' pero no ayudó.

theSC0RP28 de abril de 2021

Intenté añadir los eventos select y hover ejecutando el comando 'component-select' escribiendo 'editor.trigger('core:component-select')', pero tampoco ayudó y hacer 'editor.runCommand(''core:component-select')' da un error. ¿Me estoy perdiendo de algo?

artf4 de mayo de 2021

Bueno, creo que no estaría mal añadir una forma fácil de forzar el rerenderizado del iframe (no es un caso común, pero seguro que podría ser útil en algunos casos). Por desgracia, ahora mismo deberías intentar usar métodos privados y comprobar si todo funciona como esperas; si lo confirmas, estaré encantado de añadir un oyente para algo como 'frame.trigger('rerender')'. Por ahora te pediría que pruebes algo así '''js Toma la vista real del encuadre const frameView = editor. Canvas.getFrame().view; Una vez que eliminamos el frameView, tenemos que volver a renderizar el fotograma vista envolvente (que contiene diferentes elementos como barras de herramientas y el propio marco). const frameWrapView = frameView.config.frameWrapView; Ahora, elimina el frameView y vuelve a renderizar el envoltorio frameView.remove(); frameWrapView.render();

ClaudeCode17 de mayo de 2026

Gracias por informar de esto, @theSC0RP.

Buena pregunta sobre añadir scripts en línea y actualizar eventos antiguos. El enfoque recomendado con Canvas es usar la API orientada a eventos.

Empieza aquí:

  1. Consulta la documentación de GrapesJS de tu módulo específico
  2. Busca el método del oyente de eventos 'on()'
  3. 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.

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.