Подтвердить что ты не робот

Как получить доступ к настройкам проверки правописания Chrome в JavaScript

Как обнаружить орфографическую ошибку внутри текстового поля в JavaScript? Есть ли событие, связанное с этим? Как мне получить доступ к предложениям проверки орфографии Chrome для слова с ошибками?

4b9b3361

Ответ 1

Как мне получить доступ к предложениям проверки орфографии Chrome для слова с ошибками?

Насколько мне известно, вы не можете. Чтобы более полно ответить, я также расскажу о связанных проблемах:

Есть ли событие, связанное с этим?

Нет, и событие contextmenu не содержит ничего полезного для этой цели: у него нет информации проверки орфографии, и вы не можете прочитать список элементов контекстного меню (которые могут содержать предложения о правописании). Событие change также не предоставляет информацию проверки орфографии.

Как обнаружить орфографическую ошибку внутри текстового поля в JavaScript?

Вы можете либо запрограммировать это самостоятельно, либо использовать стороннюю библиотеку. В этой теме есть другие вопросы, или вы можете искать себя. Связанные вопросы включают:

Ответ 2

Поскольку вопрос кажется немного широким и открытым для интерпретации (особенно с текущими требованиями к бонусам), я начну с объяснения того, как я его интерпретирую и попытаюсь ответить на подзапросы в этом процессе (стиль Q/A).

Кажется, вы спрашиваете:

"Google Chrome" / "Хром":

  • Q:, если браузер "Google Chrome" / "Chromium" предоставляет API-интерфейс spellcheck-API, с которым вы можете взаимодействовать, используя JavaScript на общей веб-странице
    A: Нет, не совсем (по крайней мере, не так, как вам хотелось бы).
    Существует спецификация (с декабря 2012 года).

    Вот некоторые его части:

    Может ли этот API быть частью веб-платформы?
    Вряд ли проверка орфографии станет частью веб-платформы.

    Что еще более важно, у него есть только один метод под названием 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.      
    

    Точка? Помогая сообществу создавать пользовательские словари для Zulu, Klingon и т.д., Потому что примерно 20-30% ошибок ошибок Spellcheck касались неподдерживаемых языков.

    Теперь не путайте API проверки Chrome SpellCheck (выше) с API проверки подлинности Chrome/Webkit (hu? say what?):
    Хиронори Боно (разработчик программного обеспечения для Google Chrome) предложил API в 2011 году и некоторые связанных с ошибками и патч, который был (/все еще?) в Chrome.

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

    Пример использования:

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

    из http://peter.sh/experiments/spellcheck-api/
    Источники:
    http://html5-demos.appspot.com/static/html5-whats-new/template/index.html#42,
    http://peter.sh/experiments/spellcheck-api/ (вы должны попробовать его жить там, если этот API все еще работает..)

    Смысл? После этого через пару дней он неожиданно щелкнул: пользовательская проверка проверки орфографии с браузером - с помощью контекстного меню браузера, а не блокировки и предоставления собственных. Таким образом, можно связать это с существующей внешней библиотекой проверки орфографии.

    Над историческим и экспериментальным API явно никогда не поддерживалось то, что вы хотите достичь.

  • Q:, если "Google Chrome" / "Chromium" spellcheck-API предоставляет событие onSpellError (например,) (например) текстовое поле
    A: Как указано выше, похоже, что в Chrome нет такого события.
    В настоящее время HTM5 предоставляет возможность включать или отключать проверку орфографии на поддерживаемых элементах проверки орфографии.
  • Q:, как получить доступ к предложениям проверки орфографии Chrome для слова с ошибкой

    A: Как указано выше: похоже, вы не можете. Похоже, это тот же ответ, что и для почти дублированного вопроса: Как я могу получить доступ к словарю проверки правописания Chrome?
    Интересно отметить, что "Проверка spellchecker TinyMCE ранее была предоставлена ​​путем "взлома" API-интерфейса панели инструментов Google, принадлежащего Google, в соответствии с политикой использования Google в соответствии с законом. обслуживание было прекращено на постоянной основе.". Теперь, если вы ищете в Интернете, вы, вероятно, можете найти, как они это сделали, но это, конечно, не лучший способ сделать это (и защищать его здесь).
    Используя библиотеки проверки правописания javascript, вы, тем не менее, можете использовать словари Chrome (так что вам не нужно будет поддерживать словари), но вам придется поставлять и отправлять эти файлы вместе с вашим веб-приложением (вместо того, чтобы загружать установленные в браузере).

Общее:

  1. Q: Как обнаружить орфографическую ошибку внутри текстового поля в JavaScript
    A: Internet Explorer позволяет использовать проверку орфографии интегрированы в Microsoft Word через ActiveX, как указано ниже фрагмент кода.

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

    Источник: https://lists.w3.org/Archives/Public/public-webapps/2011AprJun/0516.html

    Но IE/ActiveX/MS-Word на самом деле не то, о чем вы просили, и это не очень передовая платформа/браузер, , которая оставляет нас с локальными библиотеками проверки правописания javascript:
    Методы проверки правописания Javascript
    http://code.google.com/p/bjspell/
    http://www.javascriptspellcheck.com/
    http://ejohn.org/blog/revised-javascript-dictionary-search/
    Etc.
    Сравнение/объяснение их действительно выходит за рамки этого ответа.
    Стоит отметить, какой формат словаря вы хотите использовать!

    В качестве альтернативы можно использовать внешнюю службу API проверки орфографии (где сервер обрабатывает данные, и вы обмениваетесь им с помощью AJAX).
    Очевидно, что вам нужно учитывать вопросы конфиденциальности!

Запросы на награду:

  1. Q: окончательное доказательство
    A: Я должен был найти что-то большее в отношении предмета, чем некоторые эзотерические экспериментальные функции. Также я не вижу библиотеки, которые пытаются подкрепить свои функциональные возможности некоторыми (предстоящими) стандартизованными идентификаторами метода/событий и т.д.
    Как уже отмечалось, популярные библиотеки, такие как TinyMCE, в настоящее время также не имеют другого решения. В менталитете "живой стандарт" / "мир - наша детская площадка" мой ответ может быть очень усталым, когда я нажимаю кнопку "отправить". Но даже тогда я бы не рекомендовал такую ​​экспериментальную функцию в ближайшем будущем на веб-сайте/интерфейсе уровня производства.
  2. Q: и получите хороший ответ, объясняющий, как достичь этого
    (хром конкретный или вообще? Проверка орфографии или обнаружение опечатки?)
    A: Помимо вышеизложенного, я ничего не могу придумать (кроме библиотек, которые в настоящее время используют веб-разработчики (см. 4)).

Надеюсь, это поможет!

Ответ 3

Нет API-интерфейсов для доступа к предложениям проверки орфографии Chrome, а также нет никаких событий, которые были бы запущены, когда слова были опечалены. Однако события могут быть реализованы.

Я понятия не имею, каков ваш вариант использования для этой функции, но я собрал демонстрацию, используя montanaflynn API проверки орфографии в MashApe. Демо просматривает текстовую область, и когда пользователь делает паузу при вводе текста, он отправляет текст через проверяемый API. API возвращает JSON, содержащий исходную строку, предложенную исправленную строку и объект, содержащий исправленные слова и предлагаемые им замены.

Предложения отображаются ниже текстового поля. Когда предложения зависают, туманное слово подсвечивается. При нажатии кнопки опечатка заменяется предложением.

Я также добавил функцию перетасовки, которая скремблирует слова в строке перед ее отправкой, чтобы добавить слой конфиденциальности к использованию API (он также использует SSL). Ни API, ни Chrome не используют контекстные предложения, поэтому перетасовка не изменяет результаты.

Здесь ссылка на CodePen: http://codepen.io/aecend/pen/rOebQq

И вот код:

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>

Я использовал jQuery для упрощения запроса AJAX для этой демонстрации. Это легко можно сделать в ваниле JS.

Ответ 4

Вы можете отключить проверку орфографии внутреннего браузера и интегрировать любую другую библиотеку проверки орфографии с открытым исходным кодом, например JavaScript SpellCheck. Он содержит все события, которые могут потребоваться для глубокой интеграции, проверьте страницу API.