2009-11-24 11 views
5

Tengo un problema de la siguiente manera: Estamos usando un editor de texto enriquecido (TinyMCE, pero eso no es importante aquí, creo) en nuestra aplicación. Ahora, con Internet Explorer 8, hemos notado que si escribe en el contenido que se parece a una dirección web:Javascript: Solución necesaria: Internet Explorer cambia el texto del enlace al cambiar el href

www.google.com

... IE convierte amablemente a una enlace por alguna funcionalidad nativa a navegador. Ahora, si realmente desea convertirlo en un enlace, y elige editar las propiedades del enlace, y configure la href, p. a

www.google.com/analytics

... entonces cuando el javascript establece el atributo href de la etiqueta de anclaje, también el texto de los cambios de enlace. El resultado deseado es:

`<a href="http://www.google.com/analytics">www.google.com</a>` 

pero en realidad es:

`<a href="http://www.google.com/analytics">www.google.com/analytics</a>` 

¿Alguien sabe una manera de evitar esto?

Actualización: Este comportamiento solo se ha observado en Internet Explorer 8 y 7. Firefox, Chrome y Safari no se ven afectados. El problema también se puede observar en el sitio web de TinyMCE http://tinymce.moxiecode.com/examples/full.php, por lo que probablemente no sea un problema de configuración de TinyMCE.

+0

¿IE9 se comporta de la misma manera? Estoy viendo este comportamiento en IE7 y 8, pero no tengo acceso a IE9. – Prembo

Respuesta

8

Después de investigar y depurar, descubrí que el problema está causado por el comportamiento incorporado de Internet Explorer. Ocurre al establecer la propiedad href de un enlace, cuyo contenido de texto parece ser una URL (según IE). En estos casos, IE copia el contenido del atributo href en el texto del enlace.

Puede haber varias soluciones para este, pero me encontré con que al menos esta lógica funciona:

  1. tienda de la innerHTML en una variable temporal,
  2. establece el atributo href como de costumbre
  3. si innerHTML ha cambiado, copie el original innerHTML de la variable temporal.

Esto parece funcionar porque al cambiar el innerHTML del enlace no causa el cambio del atributo href.

En tinyMCE, busque la siguiente línea en setAllAttribs() de funciones.js del plugin advlink:

setAttrib(elm, 'href', href); 

... y reemplazarlo con este monstruo:

if(tinyMCE.isMSIE) { 
    var tmp = elm.innerHTML; 
    setAttrib(elm, 'href', href); 
    if(elm.innerHTML != tmp) // optional, but keeps unnecessary innerHTML set:s away 
     elm.innerHTML = tmp; 
} 
else { 
    setAttrib(elm, 'href', href); 
} 

... y sus enlaces aparecerán como si no se toca. Yo también started a thread on the tinyMCE forums sobre esto. Si publican algunas mejoras en mi solución o dicen que no tiene sentido, actualizaré esta pregunta también.

0

necesitamos más información:

  1. se comporta de la misma manera en otros navegadores?
  2. ¿Está escribiendo esto en el área de texto enriquecido o en la vista html?
  3. ¿Ha configurado TinyMCE correctamente? Suena como un error con su implementación particular: no está analizando correctamente las etiquetas HTML.
+0

Hola, el diálogo de comentarios no es compatible con el descuento, lo noto. (1) Este problema solo ocurre en Internet Explorer, y solo he probado la versión 8. (2) Estoy escribiendo el texto en el área de texto enriquecido, pero funciona igual si primero creo el enlace en fuente HTML y luego editarlo. (3) Creo que el problema no está en la configuración de TinyMCE. Puede reproducir el problema en su sitio web de ejemplo: tinymce.moxiecode.com/examples/full.php – Manne

+0

Veo exactamente el mismo comportamiento en IE 7. ¿Está seguro de que esto no es una función de tinyMCE? –

+0

¡Ya veo! Lo intenté en Firefox, Chrome y Safari y no muestran este comportamiento. Casi parece una "característica" de TinyMCE en realidad, que solo funciona en IE ahora mismo. No veo Internet Explorer haciendo esto en otras áreas de texto, así que estoy casi seguro de que es una 'característica' de TinyMCE, en cuyo caso probablemente haya una manera de desactivarlo en la configuración. Eche un vistazo a su documentación y vea. Yo personalmente no había visto esto antes, pero en realidad lo encuentro útil :) – Joshua

Cuestiones relacionadas