Скрипт не работает в Firefox, но работает в Chrome

Я сделал скрипт для регистрации события с колесом прокрутки большого пальца (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. Кто-нибудь может указать мне на ошибку? Заранее спасибо!

2 ответа

Существует новый стандарт для обработки событий колесика мыши, который является стандартным для всех браузеров:

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

Событие будет там.

Только DOMMouseScroll работает с Firefox, но использует другой API. Таким образом, вы должны написать отдельный обработчик для Firefox, вместо использования MouseWheelHandlerили отрегулируйте MouseWheelHandler поддерживать оба.

Как указал kshetline, теперь существует новый стандарт, который работает со всеми современными браузерами: https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent.

Два других варианта не работают в Firefox, как указано здесь:

Эта функция является нестандартной и не соответствует стандартам. Не используйте его на производственных сайтах, выходящих в Интернет: он не будет работать для каждого пользователя. Также могут быть большие несовместимости между реализациями, и поведение может измениться в будущем.

Источник: https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel

Другие вопросы по тегам