2009-12-10 3 views
7

Estoy creando una aplicación de entrada de datos/control de calidad basada en navegador que permitirá a las personas editar archivos OCRed, que naturalmente tienen muchísimos errores. Los trozos de datos se colocan en áreas de texto para que puedan verificarse, pero los subrayados rojos solo aparecen cuando el usuario coloca manualmente el cursor en una palabra mal escrita.Verificación ortográfica de la fuerza en un área de texto en WebKit

¿Hay alguna manera de forzar a WebKit a agregar el pequeño corrector ortográfico rojo a las áreas de texto?

Respuesta

10

Esencialmente necesita utilizar la api de selección para mover el punto de inserción sobre cada palabra para que Safari la resalte. Aquí está un ejemplo para escanear a través de los primeros mil palabras ...

textarea = document.getElementById("mytextarea"); 
textarea.focus(); 

var selection = window.getSelection(); 
selection.modify("move", "backward", "line"); 
for (var i = 0; i < 1000; i++) { 
    selection.modify("move", "forward", "word"); 
} 

// Remove focus from the element, since the word under 
// the cursor won't have a misspelling marker. 
textarea.blur(); 

Este código fue levantada de la WebKit Layout test suite.

+1

Esto funciona! ¡Gracias! –

2

No tengo idea de si esto realmente funcionará o no, pero es posible que desee intentar jugar con el material de selección. En otras palabras, después de actualizar el área de texto (y quiere "actualizar" que hacer el programa subrayado rojo), que podría ser capaz de hacer algo como:

var length = document.getElementById('TEXTAREA#your').value.length; 
document.getElementById('TEXTAREA#your').setSelectionRange(0, length); 

puede encontrar un poco más sobre cómo use las selecciones aquí: How do I select arbitrary text on the page using javascript? o mediante una búsqueda en Google.

Mi pensamiento es que la creación de una selección (o tal vez borrarla después de crearla) podría desencadenar un evento de navegador diferente que hace que la revisión ortográfica se actualice ... pero eso es sólo una idea; podría hacer lo mismo que configurar textArea.value (es decir, nada).

+0

Esta es una buena idea. También estaba pensando en pasar el cursor por cada palabra de texto palabra por palabra, pero eso probablemente tomará suficiente tiempo para molestar al usuario. – sakabako

+0

Avíseme si funciona o no; ahora me tienes curiosidad :-) – machineghost

+0

Voy a publicar si lo intento, pero esta es una pequeña parte de un proyecto apresurado. – sakabako

2

Gran respuesta de Mark Fowler, aquí es una mejora sobre el mismo:

textarea = document.getElementById("mytextarea"); 
textarea.focus(); 
var textLength = textarea.value.length; 

var selection = window.getSelection(); 
for (var i = 0; i < textLength; i++) { 
    selection.modify("move", "backward", "character"); 
} 

// Remove focus from the element, since the word under 
// the cursor won't have a misspelling marker. 
textarea.blur(); 

para que pueda evitar la arbitrariedad número 1000 y que puede manejar múltiples líneas.

Cuestiones relacionadas