Добавлен непассивный прослушиватель событий для события "touchstart" с блокировкой прокрутки
Внезапно сегодня из ниоткуда я начал получать это на каждой странице нашего сайта
Added non-passive event listener to a scroll-blocking 'touchstart' event.
Consider marking event handler as 'passive' to make the page more responsive
И это не раз или два.. как тысячи их....
![enter image description here]()
Они в ярости.
Единственный способ остановить поток нарушений - закомментировать эту строку
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js" type="text/javascript"></script>
Я читал другие посты о том, что означает это нарушение, но я действительно не вижу, что я сделал что-то другое между двумя часами назад и сейчас (я сделал полный откат, чтобы посмотреть, помогло ли это)
Это почти как если бы кто-то добавил ошибку в jquery.min.js, но я серьезно сомневаюсь, потому что тогда все ее получат.
Есть идеи? Я пытался отладить все, что мог, и до сих пор не знаю, что вызывает это?!?
ОБНОВИТЬ
Я заменил все <button><md-tooltip>text</md-tooltip></button>
width <button data-toggle="tooltip" title="text"></button>
Это позволило удалить 99% всех нарушений,
Ответы
Ответ 1
Хорошо, копаем это немного больше, это не новое поведение, об этом сообщалось некоторое время назад, и jQuery все еще не исправил это.
Проблема заключается в том, что для того, чтобы обработчик был passive
он должен быть уверен в том, что никогда не будет вызывать preventDefault()
но jQuery не знает заранее...
Единственный совет, который я могу вам дать, это изменить уровень ведения журнала консоли и удалить "Verbose". Продолжайте в этом вопросе идеи для решения этой проблемы.
Ответ 2
Это решает проблему для меня:
jQuery.event.special.touchstart = {
setup: function( _, ns, handle ){
if ( ns.includes("noPreventDefault") ) {
this.addEventListener("touchstart", handle, { passive: false });
} else {
this.addEventListener("touchstart", handle, { passive: true });
}
}
};
Ответ 3
Я использую различные события, и это, кажется, решает мой случай использования
(function () {
if (typeof EventTarget !== "undefined") {
let func = EventTarget.prototype.addEventListener;
EventTarget.prototype.addEventListener = function (type, fn, capture) {
this.func = func;
if(typeof capture !== "boolean"){
capture = capture || {};
capture.passive = false;
}
this.func(type, fn, capture);
};
};
}());
Ответ 4
Ответ от Серхио правильный, добавьте его в нижний скрипт jquery. Если есть проблема с сенсорным пуском и сенсорным перемещением, просто добавьте тот же код и замените сенсорный запуск с сенсорным движением, например так:
jQuery.event.special.touchstart = {
setup: function( _, ns, handle ){
if ( ns.includes("noPreventDefault") ) {
this.addEventListener("touchstart", handle, { passive: false });
} else {
this.addEventListener("touchstart", handle, { passive: true });
}
}
};
jQuery.event.special.touchmove = {
setup: function( _, ns, handle ){
if ( ns.includes("noPreventDefault") ) {
this.addEventListener("touchmove", handle, { passive: false });
} else {
this.addEventListener("touchmove", handle, { passive: true });
}
}
};