page ortografia corrector change javascript google-chrome chromium spell-checking

change - corrector de ortografia javascript



Cómo acceder a las sugerencias de corrección ortográfica de Chrome en JavaScript (4)

¿Cómo accedo a las sugerencias de corrección ortográfica de Chrome para una palabra mal escrita?

Por lo que yo sé, no puedes . Para responder más completamente, también mencionaré cuestiones relacionadas:

¿Hay algún evento asociado con esto?

No, ni el evento contextmenu proporciona nada útil para este propósito: no tiene información de revisión ortográfica y no puede leer la lista de elementos del menú contextual (que puede contener sugerencias de ortografía). El evento de change tampoco proporciona información de revisión ortográfica.

¿Cómo se detecta un error de ortografía dentro de un área de texto en JavaScript?

Puede codificar esto usted mismo o utilizar una biblioteca de terceros. Hay otras preguntas sobre desbordamiento de pila sobre este tema o puede buscar usted mismo. Las preguntas relacionadas con el desbordamiento de pila incluyen:

  • Métodos de corrección ortográfica de Javascript
  • recomendaciones de corrector ortográfico de Javascript
  • Correctores ortográficos basados ​​en Javascript para aplicaciones web
  • Añadir un corrector ortográfico a mi sitio web
  • Necesita corrector ortográfico del lado del cliente para DIV
  • javascript corrector de ortografía

¿Cómo se detecta un error de ortografía dentro de un área de texto en JavaScript? ¿Hay algún evento asociado con esto? ¿Cómo accedo a las sugerencias de corrección ortográfica de Chrome para una palabra mal escrita?


Como la pregunta parece un tanto amplia y abierta a la interpretación (especialmente con los requisitos de recompensa actuales), comenzaré por explicar cómo interpreto y trato de responder a las preguntas secundarias en el proceso (estilo Q / A).

Usted parece estar preguntando:

"Google Chrome" / "Chromium" específico:

  1. P: si el navegador "Google Chrome" / "Chromium" expone una API de comprobación ortográfica con la que puede interactuar mediante el uso de javascript en una página web común
    R: No, en realidad no (al menos no de la manera que te gustaría).
    Hay una propuesta de API Spellcheck específica de Chromium (desde diciembre de 2012).

    Aquí hay algunas partes de esto:

    ¿Podría esta API ser parte de la plataforma web?
    Es poco probable que la revisión ortográfica se convierta en parte de la plataforma web.

    Más importante aún, tiene solo un método llamado ''loadDictionary'':

    loadDictionary( myDictionaryFile // string path or URL , dictionaryFormat // enumerated string [ "hunspell" (concatentation of .aff and .dic files) // , "text" (plain text) // ] ) // returns int indicating success or an error code in loading the dictionary.

    ¿El punto? Ayudar a la comunidad a crear diccionarios personalizados para Zulu, Klingon, etc., ya que aproximadamente el 20-30% de las correcciones de errores de Spellcheck se referían a idiomas no admitidos.

    Ahora no confundamos la API SpellCheck de Chrome (arriba) con la API SpellCheck de Chrome / Webkit (¿qué?):
    Hironori Bono (un ingeniero de software para Google Chrome) propuso una API en 2011 y algunas relaciones de errores relacionadas y un patch que estaba (¿está todavía?) En Chrome.

    void addSpellcheckRange( unsigned long start , unsigned long length , DOMStringList suggestions // [, unsigned short options] ); void removeSpellcheckRange(SpellcheckRange range);

    Ejemplo de uso:

    var input = document.querySelector(''input''); input.addSpellcheckRange( 4 , 9 , [ ''Chrome'' , ''Firefox'' , ''Opera'' , ''Internet Explorer'' ] );


    Fuentes:
    http://html5-demos.appspot.com/static/html5-whats-new/template/index.html#42 ,
    http://peter.sh/experiments/spellcheck-api/ (deberías poder probarlo en vivo SI esta API todavía funciona ...)
    ¿El punto? Después de contemplar esto un par de días, de repente hizo clic: integración ortográfica personalizada con el navegador, utilizando el menú contextual del navegador en lugar de bloquearlo y proporcionar el suyo propio. Entonces, uno podría vincular eso con una biblioteca externa de verificación ortográfica existente.

    Por encima de las API históricas y experimentales, claramente nunca apoyaron directamente lo que desea lograr.

  2. P: si el API de revisión ortográfica "Google Chrome" / "Chromium" expone un evento ''onSpellError'' (-like) en (por ejemplo) un área de texto
    R: Como se indicó anteriormente, parece que Chrome no tiene dicho evento.
    HTM5 actualmente solo expone la capacidad de habilitar o deshabilitar el corrector ortográfico en los elementos compatibles con revisión ortográfica.
  3. P: cómo acceder a las sugerencias de corrección ortográfica de Chrome para una palabra mal escrita
    R: Como se describe arriba: parece que no puedes. Parece ser la misma respuesta que para la pregunta casi duplicada: ¿cómo puedo acceder al diccionario de revisión ortográfica de Chrome?
    Podría ser interesante señalar que " el corrector ortográfico de TinyMCE se proporcionó anteriormente al ''piratear'' una API de la barra de herramientas de Chrome propiedad de Google, contra las propias políticas de uso legal de Google. Este servicio de revisión ortográfica se ha suspendido de forma permanente ". Ahora bien, si busca en la web, probablemente pueda encontrar cómo lo hicieron, pero ciertamente no parece ser la mejor manera de hacerlo (y abogar por esto aquí).
    Sin embargo, al usar javascript spell-check libraries, puedes usar los diccionarios de Chrome (para que no tengas que mantener los diccionarios) pero deberías suministrar y enviar estos archivos junto con tu aplicación web (en lugar de buscar los instalados en el navegador )

General:

  1. P: Cómo detectar un error de ortografía dentro de un área de texto en JavaScript
    R: Internet Explorer permite usar el corrector ortográfico integrado en Microsoft Word a través de ActiveX, como se detalla en el siguiente fragmento de código.

    function CheckText(text) { var result = new Array; var app = new ActiveXObject(''Word.Application''); var doc = app.Documents.Add(); doc.Content = text; for (var i = 1; i <= doc.SpellingErrors.Count; i++) { var spellingError = doc.SpellingErrors.Item(i); for (var j = 1; j <= spellingError.Words.Count; j++) { var word = spellingError.Words.Item(j); var error = {}; error.word = word.Text; error.start = word.Start; error.length = word.Text.length; error.suggestions = new Array; var suggestions = word.GetSpellingSuggestions(); for (var k = 1; k <= suggestions.Count; k++) { error.suggestions.push(suggestions.Item(k).Name); } result.push(error); } } return result; }

    Fuente: https://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0516.html

    Pero IE / ActiveX / MS-Word no es realmente lo que usted solicitó, ni tampoco es muy multiplataforma / navegador, lo que nos deja con bibliotecas locales de revisión ortográfica de JavaScript :
    Métodos de corrección ortográfica de Javascript
    http://code.google.com/p/bjspell/
    http://www.javascriptspellcheck.com/
    http://ejohn.org/blog/revised-javascript-dictionary-search/
    Etc.
    Compararlos / explicarlos está realmente fuera del alcance de esta respuesta.
    ¡Vale la pena señalar qué formato de diccionario desea usar!

    Alternativamente, uno podría usar un servicio externo API de revisión ortográfica (donde un servidor maneja los datos y usted se comunicaría con él usando AJAX).
    ¡Obviamente tendrías que tener en cuenta los asuntos de privacidad!

Los requisitos de recompensa ''piden:

  1. Q: prueba definitiva
    R: Debería haber encontrado algo más sobre el tema que algunas características experimentales esotéricas. Tampoco veo bibliotecas que intenten calzar su funcionalidad en algunos (próximos) métodos estandarizados / identificadores de eventos, etc.
    Como se señaló, las bibliotecas populares como TinyMCE tampoco tienen actualmente otra solución.
    En la mentalidad de "nivel de vida" / "el mundo es nuestro campo de juego", mi respuesta ya podría estar obsoleta cuando presiono el botón "enviar". Pero incluso entonces, no recomendaría una función experimental de este tipo en un futuro próximo en un sitio web / interfaz de nivel de "producción".
  2. P: y obtener una buena respuesta explicando cómo lograr esto
    (¿específico de Chrome o, en general, sugerencias de revisión ortográfica o detección de un error tipográfico?)
    R: Aparte de lo anterior, no se me ocurre nada (aparte de las bibliotecas que los desarrolladores web usan actualmente (ver 4)).

¡Espero que esto ayude!


No hay una API para acceder a las sugerencias de revisión ortográfica de Chrome, ni hay ningún evento que se active cuando las palabras están mal escritas. Sin embargo, los eventos podrían ser implementados.

No tengo idea de cuál es tu caso de uso para esta funcionalidad, pero market.mashape.com/montanaflynn/spellcheck una demostración usando market.mashape.com/montanaflynn/spellcheck . La demostración mira un área de texto, y cuando el usuario hace una pausa al escribir, envía el texto a través de la API para probar. La API devuelve JSON que contiene la cadena original, la cadena corregida sugerida y un objeto que contiene las palabras corregidas y sus reemplazos sugeridos.

Las sugerencias se muestran debajo del área de texto. Cuando las sugerencias están suspendidas, la palabra mal escrita se resalta. Cuando se hace clic, el error se reemplaza con la sugerencia.

También agregué una función de mezcla, que codifica las palabras en la cadena antes de enviarla, para agregar una capa de privacidad al uso de la API (también usa SSL). Ni la API ni Chrome usan sugerencias basadas en el contexto, por lo que la combinación no altera los resultados.

Aquí hay un enlace al CodePen: http://codepen.io/aecend/pen/rOebQq

Y aquí está el código:

CSS

<style> * { font-family: sans-serif; } textarea { margin-bottom: 10px; width: 500px; height: 300px; padding: 10px; } .words { width: 500px; } .word { display: inline-block; padding: 2px 5px 1px 5px; border-radius: 2px; background: #00B1E6; color: white; margin: 2px; cursor: pointer; } </style>

HTML

<textarea id="text" placeholder="Type something here..."></textarea> <div id="words"></div>

JavaScript

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> <script> ;(function(){ "use strict"; var words = document.getElementById("words"), input = document.getElementById("text"), timeout, xhr; input.addEventListener("keyup", function(e){ if (timeout) clearTimeout(timeout); if (!this.value.trim()) words.innerHTML = ''''; timeout = setTimeout(function() { var test_phrase = shuffle_words( input.value ); spell_check(test_phrase); timeout = null; }, 500); }); function shuffle_words(inp) { inp = inp.replace(//s+/g, '' ''); var arr = inp.split(" "), n = arr.length; while (n > 0) { var i = Math.floor(Math.random() * n--), t = arr[n]; arr[n] = arr[i]; arr[i] = t; } return arr.join('' ''); } function spell_check(text){ if (xhr) xhr.abort(); xhr = $.ajax({ url: ''https://montanaflynn-spellcheck.p.mashape.com/check/'', headers: { ''X-Mashape-Key'': ''U3ogA8RAAMmshGOJkNxkTBbuYYRTp1gMAuGjsniThZuaoKIyaj'', ''Accept'': ''application/json'' }, data: { ''text'': text }, cache: false, success: function(result){ xhr = null; suggest_words(result); } }); } function suggest_words(obj){ if (!obj.corrections) return; words.innerHTML = ''''; for (var key in obj.corrections) { if (obj.corrections.hasOwnProperty(key)) { var div = document.createElement("div"); div.className = "word"; div.innerHTML = obj.corrections[key][0]; div.orig = key; div.onmouseover = function() { var start = input.value.indexOf(this.orig); input.selectionStart = start; input.selectionEnd = start + this.orig.length; }; div.onmouseout = function() { var len = input.value.length; input.selectionStart = len; input.selectionEnd = len; } div.onclick = function() { input.value = input.value.replace(this.orig, this.innerHTML); this.parentNode.removeChild(this); } words.appendChild(div); } } } })(); </script>

Solo utilicé jQuery para simplificar la solicitud de AJAX para esta demostración. Esto podría hacerse fácilmente en vainilla JS.


Puede desactivar la revisión ortográfica del navegador interno e integrar cualquier otra biblioteca de revisión ortográfica de código abierto, por ejemplo, http://www.javascriptspellcheck.com/ . Contiene todos los eventos que pueda necesitar para una integración profunda, consulte la página de la API .