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

Я создаю браузерное приложение для контроля качества/ввода данных, которое позволит людям редактировать OCR-файлы, которые, естественно, содержат массу ошибок. Фрагменты данных помещаются в текстовые области, чтобы их можно было проверить, но красные подчеркивания появляются только тогда, когда пользователь вручную помещает курсор в слово с ошибкой.

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


person sakabako    schedule 10.12.2009    source источник


Ответы (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.

person Mark Fowler    schedule 07.03.2011
comment
Чтобы это работало в настоящее время, вам нужно сделать: await wait(0); selection.modify('move', 'forward', 'word');, где wait(ms) { return new Promise(resolve=> setTimeout(resolve, ms)) } - person Machiaweliczny; 20.01.2020

Я понятия не имею, будет ли это на самом деле работать или нет, но вы можете попробовать поиграть с материалом выбора. Другими словами, после того, как вы обновите текстовое поле (и захотите «обновить» его, чтобы показать красное подчеркивание), вы можете сделать что-то вроде:

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

Вы можете найти немного больше о том, как использовать выбор здесь: javascript">Как выделить произвольный текст на странице с помощью javascript? или через поиск Google.

Я думаю, что создание выбора (или, возможно, его очистка после его создания) может вызвать другое событие браузера, которое вызывает обновление проверки орфографии ... но это всего лишь идея; он может делать то же самое, что и установка textArea.value (т.е. ничего).

person machineghost    schedule 11.12.2009
comment
Это хорошая идея. Я также подумывал о том, чтобы провести курсором по каждой текстовой области слово за словом, но это, вероятно, займет достаточно времени, чтобы раздражать пользователя. - person sakabako; 12.12.2009
comment
Дайте мне знать, если это сработает или нет; теперь ты меня заинтересовал :-) - person machineghost; 14.12.2009
comment
Я опубликую, если попробую, но это небольшая часть поспешного проекта. - person sakabako; 15.12.2009

Отличный ответ от Марка Фаулера, вот его улучшение:

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, и он может обрабатывать несколько строк.

person Chango    schedule 18.06.2012