2014-09-12 2 views
4

Я пытаюсь создать расширение Chrome, которое имеет дело с выбранным текстом. В некоторых других текстовых материалах на страницах веб-страниц есть обработчики событий click/mouse-up/down, которые переходят на новую страницу.Перехват (и, возможно, отмена) обработчиков событий мыши/клавиатуры страницы

Есть ли способ использовать фоновый или контентный скрипт для временного отключения (и восстановления) произвольных обработчиков событий страницы без вмешательства в собственный выбор текста?

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

Спасибо!

ответ

6

Большинство событий HTML DOM следуют за capture-target-bubble event model. Это означает, например, что если вы нажмете на кнопку, то событие «щелчок» сначала отправляется в корневой каталог, вплоть до кнопки, затем выполняется резервное копирование. Распространение события может быть остановлено, что предотвращает уведомление слушателя события на следующем уровне о событии.

Самая ранняя возможность получить событие в корне, часто window на этапе захвата. Для того, чтобы связать слушатель событий для фазы захвата, используйте addEventListener с третьим параметром, установленный в true:

// in a content script, at run_at:document_start 
window.addEventListener('click', function(event) { 
    event.stopImmediatePropagation(); 
}, true); 

Многие веб-страницы используют JQuery для управления событиями DOM, который связывает слушатель событий в фазе восходящей цепочки, поэтому предыдущим метод будет работать на большинстве сайтов. Если на странице не используется jQuery, вам необходимо привязать прослушиватель событий к document_start, чтобы убедиться, что ваш прослушиватель событий запускается перед каждым другим прослушивателем событий.

+0

извините, это не относится к вопросу –

+0

@ uosɐs Как вам удалось выяснить через 45 секунд, что ответ не применим? Если вы хотите, чтобы страница не вмешивалась в собственные события, тогда единственный надежный способ сделать это - остановить просмотр этих событий. –

+1

он не учитывает нюансы изолированного мира хромовых расширений. Это ответ на общую информацию о событиях DOM. –

Смежные вопросы