2009-11-24 10 views
5

Ho un problema come segue: Stiamo utilizzando un editor di testo avanzato (TinyMCE, ma non è importante qui, credo) nella nostra applicazione. Ora, con Internet Explorer 8, abbiamo notato che se si digita nel contenuto che assomiglia ad un indirizzo web:Javascript: soluzione alternativa: Internet Explorer cambia il testo del link quando si modifica l'href

www.google.com

... IE converte utilmente in un collegamento da alcune funzionalità native-to-browser. Ora se vuoi veramente inserirlo in un link e scegliere di modificare le proprietà del link e impostare href e.g. a

www.google.com/analytics

... poi, quando il JavaScript imposta l'attributo href del tag di ancoraggio, anche il testo delle modifiche di collegamento. Il risultato desiderato è:

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

ma in realtà è:

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

Qualcuno sa un modo per ovviare a questo?

Aggiornamento: questo comportamento è stato osservato solo in Internet Explorer 8 e 7. Firefox, Chrome e Safari non sono interessati. Il problema può anche essere osservato sul sito Web di TinyMCE http://tinymce.moxiecode.com/examples/full.php, quindi probabilmente non è un problema di configurazione di TinyMCE.

+0

IE9 si comporta allo stesso modo? Sto vedendo questo comportamento in IE7 e 8, ma non ho accesso a IE9. – Prembo

risposta

8

Dopo alcune ricerche e il debug, ho scoperto che il problema è causato dal comportamento predefinito di Internet Explorer. Si verifica quando si imposta la proprietà href di un collegamento, il cui contenuto di testo sembra essere un URL (secondo IE). In questi casi, IE copia il contenuto dello href -attributo nel testo del collegamento.

Ci possono essere diverse soluzioni per questo, ma ho trovato che almeno questa logica così:

  1. negozio il innerHTML in una variabile temporanea,
  2. impostare l'attributo href come al solito
  3. se innerHTML è cambiato, copiare l'originale innerHTML dalla variabile temporanea.

Questo sembra funzionare perché la modifica del innerHTML del collegamento non causa la modifica dell'attributo href.

In tinyMCE, trovare la seguente riga in setAllAttribs() delle funzioni.js del plugin advlink:

setAttrib(elm, 'href', href); 

... e sostituirlo con questo mostro:

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); 
} 

... e il vostro link appariranno come se intatta. Ho anche started a thread on the tinyMCE forums su questo. Se pubblicano alcuni miglioramenti alla mia soluzione o dicono che non ha senso, aggiornerò anche questa domanda.

0

bisogno di ulteriori informazioni:

  1. lo fa si comportano allo stesso modo in altri browser?
  2. Si sta digitando nell'area di testo RTF o nella vista HTML?
  3. Avete configurato correttamente TinyMCE? Sembra un bug con la tua particolare implementazione - non sta analizzando correttamente i tag HTML.
+0

Ciao, la finestra di dialogo dei commenti non supporta markdown, noto. (1) Questo problema si verifica solo in Internet Explorer, e ho solo provato la versione 8. (2) Sto digitando il testo nell'area di testo RTF, ma funziona allo stesso modo se prima creo il link nell'origine HTML e quindi modificarlo. (3) Penso che il problema non sia con la configurazione di TinyMCE. È possibile riprodurre il problema sul loro sito Web di esempio: tinymce.moxiecode.com/examples/full.php – Manne

+0

Vedo lo stesso identico comportamento in IE 7. Sei sicuro che questa non è una funzione di tinyMCE? –

+0

Capisco! L'ho provato in Firefox, Chrome e Safari e non tutti mostrano questo comportamento. Sembra quasi una "feature" di TinyMCE in realtà, che funziona solo in IE in questo momento. Non vedo Internet Explorer farlo in altre aree di testo, quindi sono quasi certo che si tratta di una 'funzione' di TinyMCE, nel qual caso c'è probabilmente un modo per disattivarlo nella configurazione. Dai un'occhiata alla loro documentazione e guarda. Personalmente non l'avevo visto prima, ma in realtà lo trovo utile :) – Joshua

Problemi correlati