Принудительная проверка орфографии на текстовой области в WebKit



Я создаю браузер на основе QC / Data entry app, который позволит людям редактировать OCRed файлы, в которых, естественно, есть тонны ошибок. Куски данных помещаются в текстовые области, чтобы их можно было проверить, но красные подчеркивания появляются только тогда, когда пользователь вручную помещает курсор в слово с ошибкой.



Есть ли способ заставить WebKit добавить маленькие красные подчеркивания проверки орфографии в текстовые области?

581   3  

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

    Ничего не найдено.