Принудительная проверка орфографии на текстовой области в WebKit
Я создаю браузер на основе QC / Data entry app, который позволит людям редактировать OCRed файлы, в которых, естественно, есть тонны ошибок. Куски данных помещаются в текстовые области, чтобы их можно было проверить, но красные подчеркивания появляются только тогда, когда пользователь вручную помещает курсор в слово с ошибкой.
Есть ли способ заставить WebKit добавить маленькие красные подчеркивания проверки орфографии в текстовые области?
3 ответов:
По существу, вам нужно использовать API выбора, чтобы переместить точку вставки над каждым словом, чтобы Safari выделил его. Вот пример сканирования первой тысячи слов...
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();Этот код был взят изwebkit Layout test suite .
Я понятия не имею, будет ли это на самом деле работать или нет, но вы можете попробовать поиграть с отбором материала. Другими словами, после того, как вы обновите свою текстовую область (и хотите "обновить" ее, чтобы показать красное подчеркивание), вы можете сделать что-то вроде:
var length = document.getElementById('TEXTAREA#your').value.length; document.getElementById('TEXTAREA#your').setSelectionRange(0, length);Вы можете найти немного больше о том, как использовать выборки здесь: Как выбрать произвольный текст на странице с помощью javascript? или через поиск в Google.
Я думаю, что создание выборки (или, возможно, очистка его после его создания) может вызвать другое событие браузера, которое вызывает обновление проверки орфографии ... но это всего лишь идея; она может сделать то же самое, что и установка textArea.значение (т. е. ничего).
Отличный ответ от Марка Фаулера, вот его улучшение:
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();Таким образом, вы можете избежать произвольного числа 1000, и он может обрабатывать несколько строк.
Comments