Обработка события выделения текста в расширении Firefox (предотвращение выбора текста пользователем) - PullRequest
1 голос
/ 06 марта 2011

Мне было интересно, есть ли в коде Chrome лучший способ определить, когда пользователь выбирает / подсвечивает что-то на текущей странице, чем прослушивание keyup / mouseup и проверка window.getSelection().Любые идеи?

edit: На самом деле, я пытаюсь сделать так, чтобы пользователь вообще не выбирал какой-либо текст в contentDocument.Что-то, что выполнит это, будет хорошо.(Идея получить событие выбора была просто preventDefault() или иначе getSelection().removeAllRanges())

edit2: Обратите внимание, что мне нужно не просто предотвратить отображение подсветки, а сделать выбор.

edit3: мне не нужно предотвращать копирование, вместо этого выбирает элементы.

Ответы [ 5 ]

4 голосов
/ 22 марта 2011

Если вы добавите в свой текст следующую фразу, выделение будет отключено в Firefox:

<script type="text/javascript">
   document.body.style.MozUserSelect = "none";
   document.body.style.cursor = "default";
</script>

Это не только отключает выделение, но и отключает само выделение.Если вы попытаетесь выбрать область с помощью мыши или клавиш со стрелками (щелчок по позиции и навигация клавишами со стрелками, когда нажата SHIFT) и нажмите STRG+C, ничего не произойдет.

Единственный выборпосле этого изменения работает STRG+A (выбор не виден, но STRG+A & STRG+C копирует все).Этого можно было бы избежать с помощью событий клавиатуры.


Редактировать: я видел, как вы комментировали ссылку на Центр документации Mozilla , и пока они пишут, она контролирует только внешний вид, всемои тесты в Firefox 3.6 показывают, что это влияет и на выбор, а не только на внешний вид.Но это может быть изменено в будущих версиях ...

2 голосов
/ 17 июня 2011

Вы можете использовать CSS

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
2 голосов
/ 23 марта 2011

В отсутствие подходящих событий, таких как select и selectstart (которые действительно отсутствуют в Firefox, который имеет событие select, но применяет его только к элементам управления формой), все, что вы можете сделать, это использовать мышь и события клавиатуры, как вы предложили в вопросе. Предотвращение действия по умолчанию для всех событий mousedown в документе не годится, потому что оно препятствует работе всех интерактивных элементов, таких как ссылки и элементы формы. Вместо этого вы могли бы сделать что-то вроде следующего, что убирает выделение, как это сделано с помощью мыши и клавиатуры.

Это не помешает выбору с помощью «Выбрать все» в контексте и редактировать меню, поскольку в Firefox нет способа обнаружить их вообще. Если вам нужно разобраться с этим, опрос - это ваша единственная надежда.

function killSelection() {
    window.getSelection().removeAllRanges();
}

document.addEventListener("mousedown", function(evt) {
    document.addEventListener("mousemove", killSelection, false);
}, false);

document.addEventListener("mouseup", function(evt) {
    document.removeEventListener("mousemove", killSelection, false);
}, false);

document.addEventListener("keydown", killSelection, false);

window.addEventListener("blur", function(evt) {
    document.removeEventListener("mousemove", killSelection, false);
}, false);
1 голос
/ 09 марта 2011

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

<commandset commandupdater="true" events="select"
            oncommandupdate="setTimeout(selectNone, 0);"/>
1 голос
/ 06 марта 2011

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

Чтобы установить это через JavaScript в Firefox, вы можете сделать следующее:

document.body.style.MozUserSelect = "-moz-none";
...