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

avatar
Gregor Isack
8 апреля 2018 в 06:40
679
2
0

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

Источник
sridhar..
8 апреля 2018 в 06:47
0

coderhelper.com/questions/13274326/…

Brock Adams
8 апреля 2018 в 07:24
0

Вы используете Tampermonkey в Firefox, а не Greasemonkey, верно?

Gregor Isack
8 апреля 2018 в 07:24
0

Да, я использую Tampermonkey в Firefox.

Ответы (2)

avatar
kshetline
8 апреля 2018 в 07:09
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

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

avatar
Armin Šupuk
8 апреля 2018 в 06:43
0

Только 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

Gregor Isack
8 апреля 2018 в 06:46
0

Какой позор. Я так понимаю, альтернативы этому нет?