Ya no se pueden editar widgets en el editor WYSIWYG

8

Recientemente, la edición de widgets en el editor WYSIWYG ya no funciona.

La consola del navegador muestra el siguiente error cuando hago clic en un widget:

Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 1.
    at Editor.<anonymous> (http://example.com/js/tiny_mce/tiny_mce.js:1:15327)
    at Dispatcher.dispatch (http://example.com/js/tiny_mce/tiny_mce.js:1:6000)
    at DOMUtils.c (http://example.com/js/tiny_mce/tiny_mce.js:1:184650)
    at j (http://example.com/js/tiny_mce/tiny_mce.js:1:58627)
    at HTMLDocument.y (http://example.com/js/tiny_mce/tiny_mce.js:1:58785)
(anonymous) @ tiny_mce.js:1
dispatch @ tiny_mce.js:1
c @ tiny_mce.js:1
j @ tiny_mce.js:1
y @ tiny_mce.js:1
tiny_mce.js:1 Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 1.
    at Editor.<anonymous> (http://example.com/js/tiny_mce/tiny_mce.js:1:15327)
    at Dispatcher.dispatch (http://example.com/js/tiny_mce/tiny_mce.js:1:6000)
    at DOMUtils.c (http://example.com/js/tiny_mce/tiny_mce.js:1:184650)
    at j (http://example.com/js/tiny_mce/tiny_mce.js:1:58627)
    at HTMLDocument.y (http://example.com/js/tiny_mce/tiny_mce.js:1:58785)

Y aparece la ventana emergente para crear un nuevo widget, en lugar de la que edita el widget existente.

Encontré el comportamiento en diferentes versiones de Magento CE 1.xy EE 1.x, en Chrome, independientemente del sistema operativo. ¿Se puede relacionar con el parche de seguridad reciente SUPEE-9767?

Fabian Schmengler
fuente

Respuestas:

10

Aparentemente no está relacionado con el parche, sino con la última actualización de Chrome ( Chrome 58 ) que se lanzó al mismo tiempo. TinyMCE utiliza características obsoletas que se eliminaron en esa versión.

Magento 2.0 y 2.1 también se ven afectados (ver: https://github.com/magento/magento2/issues/9518 )

Parece ser un problema con las imágenes en general, aquí hay un problema relacionado en el proyecto TinyMCE: https://github.com/tinymce/tinymce/issues/3611 TinyMCE 4.6 soluciona el problema.

Ahora tiene las siguientes opciones:

  • reemplace la versión incluida de TinyMCE con 4.6 o más reciente
  • espere hasta que Magento publique un parche que actualiza TinyMCE y hasta entonces use otros navegadores (actualmente solo Chrome parece ser un problema) y espere que no eliminen las características obsoletas tan pronto.
Fabian Schmengler
fuente
Gracias por la investigación detallada, he sido flojo al respecto ^^
Raphael en Digital Pianism
3

Una solución rápida que apliqué fue anular el archivo tiny_mce JS con mi propia versión parcheada.

        editor.onClick.add(function(editor, e) {
            e = e.target;

-           // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
-           // WebKit can't even do simple things like selecting an image
-           // Needs tobe the setBaseAndExtend or it will fail to select floated images
            if (/^(IMG|HR)$/.test(e.nodeName)) {
-               selection.getSel().setBaseAndExtent(e, 0, e, 1);
+               /** Removed webkit bug fix - it breaks in Chrome 58 */
+                selection.select(e);
            }

            if (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor') {

Por un hack perezoso. Resalte la imagen con el cursor (como si estuviera seleccionando texto). Una vez resaltado, se puede hacer clic en él.

TylersSN
fuente
2

Gracias TylerSN

En mi caso, el código que había que eliminar se veía así:

if (tinymce.isWebKit && e.nodeName == 'IMG')
    t.selection.getSel().setBaseAndExtent(e, 0, e, 1);

Nota: fue una versión original de tiny_mce (v3.5.4, 2011-09-06), no un favor de Magento . Sin embargo, me encontré con esta pregunta mientras buscaba Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 1. at Editor.<anonymous>y quería agregar la solución para la referencia de otras personas. Espero que el "fuera de tema" pueda ser excusado en esta circunstancia

Martin Rüegg
fuente