Я сделал сценарий для регистрации события колеса прокрутки большого пальца (MX Master 2S, если вам интересно). Однако этот сценарий отлично работал в Chrome, но не в Firefox (Quantum). Почему это так?
var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
var regex = new RegExp(expression);
var elements = document.getElementsByClassName('pagination'); // get the elements
var search = (elements[0].innerHTML.match(regex));
//alert(search);
if (document.addEventListener){
document.addEventListener("mousewheel", MouseWheelHandler, false);
document.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
} else {
document.attachEvent("onmousewheel", MouseWheelHandler);
}
function MouseWheelHandler(e) {
var e = window.event || e;
var ret = true;
if (e.wheelDelta) {
// Tilt to the left
if (e.wheelDeltaX < 0) {
str = window.location.toString();
strsplit = str.split('/');
preloc=Number(strsplit[4])+1;
if (preloc > 0) {
window.location.replace("https://somepage.com/page/"+preloc);}
prelocstr=preloc.toString();
if (prelocstr == "NaN") {
window.location.replace(search[0]); }
ret = false;
}
// Tilt to the right
if (e.wheelDeltaX > 0) {
str = window.location.toString();
strsplit = str.split('/');
preloc=Number(strsplit[4])-1;
if (preloc > 0) {
window.location.replace("https://somepage.com/page/"+preloc);}
ret = false;
}
}
event.returnValue = ret;
}
Этот скрипт сделан в Tampermonkey. Может ли кто-нибудь указать мне на ошибку? Заранее спасибо!
Вы используете Tampermonkey в Firefox, а не Грязная обезьяна, верно?
Да, я использую Tampermonkey в Firefox



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Только DOMMouseScroll работает с Firefox, но он использует другой API. Итак, вам нужно написать отдельный обработчик для Firefox вместо использования MouseWheelHandler или настроить MouseWheelHandler для поддержки обоих.
Как отметил кшетлайн, теперь существует новый стандарт, который работает со всеми современными браузерами: https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.
Два других варианта не работают в Firefox, как указано здесь:
This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.
Источник: https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel
Какая жалость. Думаю, альтернативы этому нет?
Существует новый стандарт обработки событий колесика мыши, который является стандартным для всех браузеров:
https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent
https://developer.mozilla.org/en-US/docs/Web/Events/wheel
Чтобы использовать это событие, выполните:
document.addEventListener("wheel", MouseWheelHandler);
И не нужно:
e = window.event || e
Мероприятие будет там.