Añadir scripts en línea y actualizar eventos antiguos
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)
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ó.
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?
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();
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í:
- 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 #3873
Bloque de vídeo duplicado al volver a adjuntar el editor de GrapesJs al documento
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Chrome v94 Enlace de demo reproducible ht...
Issue #6409
No se puede arrastrar para mover componentes en móvil
Versión GrapesJS [x] Confirmo que uso la última versión de GrapesJS ¿Qué navegador usas? Chrome v133 Enlace de demo reproducible https://js...
Issue #3337
Pregunta: Usa las flechas para mover bloques en el lienzo configurado en modo de posicionamiento absoluto
Hola, estoy creando una solución para que los estudiantes cuenten sus experiencias en el instituto como diapositivas hechas desde el editor...
Issue #5164
Por defecto, los componentes se crean usando tabla en mi proyecto de demostración, pero la demo usa la propiedad flex para crear componentes
Versión GrapesJS [X] Confirmo que se debe usar la última versión de GrapesJS ¿Qué navegador usas? Versión 112.0.5615.49 (Versión oficial) (...
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 →Tutoriales relacionados
Guías detalladas sobre el mismo tema.
Tutorial
Ship to Production Faster: What’s New in GrapesJS Shadcn
Supercharge your page builder! GrapesJS Shadcn adds live drag previews, rich text / commands, dynamic data, and canvas presets to ship to prod faster.
Tutorial
How to Build a Production GrapesJS Editor: The Complete Walkthrough of Brief, Preset, Plugins, and Services
A complete walkthrough of building a production GrapesJS editor: how to choose a preset, pick plugins, and scope setup services without burning a sprint.
Tutorial
GrapesJS Inline RTE Plugins Update: CKEditor 5 v0.1.4 and Froala Inline Text Editor
CKEditor 5 Inline for GrapesJS v0.1.4 fixes Studio SDK toolbar clipping, iframe injection and link balloon bugs. Compare with Froala Inline — both $69.
Explorar categorías de plugins
Ve directamente a las páginas de categorías de plugins en el marketplace.