Исправление ошибки «[Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive»
7 октября 2023
Такая ошибка возникает в событиях, у которых установлена опция passive: true, запрещающая отменять стандартное действие браузера через метод preventDefault(). Следующий обработчик породит ошибку, так как у события установлено passive: true и внутри вызывается preventDefault():
window.addEventListener('click', function(event){
event.preventDefault();
alert('Тестовое сообщение');
}, {
passive: true
});
Для исправления нужно изменить значение свойства passive с true на false.
В итоге получится вот такой код:
window.addEventListener('click', function(event){
event.preventDefault();
alert('Тестовое сообщение');
}, {
passive: false
});
Спецификация метода addEventListener() декларирует, что по умолчанию у обработчика всегда стоит passive: false. Но почти все современные браузеры в целях повышения скорости отработки скриптов изменили значение по умолчанию для событий wheel, mousewheel, touchstart и touchmove на вариант passive: true.
Поэтому вот такой обработчик конкретно с touchstart породит ошибку:
window.addEventListener('touchstart', function(event){
event.preventDefault();
alert('Тестовое сообщение');
});
Для исправления нужно указать passive: false
window.addEventListener('touchstart', function(event){
event.preventDefault();
alert('Тестовое сообщение');
}, {
passive: false
});