Контекстное меню браузера не исчезает при добавлении пользовательского меню на Google Maps (в Windows - Chrome и Firefox) - PullRequest
0 голосов
/ 20 декабря 2018

Я использую Google Maps API в своем приложении реакции.Я добавил пользовательское контекстное меню на картах в обработчике правой кнопки мыши.Он работает абсолютно нормально во всех браузерах на Mac.Отлично работает в IE и Edge в Windows, за исключением Google Chrome и Mozilla Firefox (в ОС Windows), где кроме отображения пользовательского меню также отображается фактическое контекстное меню браузера.

Вот jsfiddle который содержит пример кода, который ведет себя аналогично тому, как работает мой код.

Пожалуйста, проверьте приведенную выше скрипку в Windows в разных браузерах, и при щелчке правой кнопкой мыши на картах вы увидите, что в Chrome и Firefox появляется два менюи на Edge только пользовательский (который является ожидаемым поведением, и это также хорошо работает на Mac).

var ContextMenu = document.getElementById("my-context-menu");

 google.maps.event.addListener(map, 'rightclick', function (ev) {
    ShowContextMenuGoolge(ContextMenu, ev);

            /** this stop NOT stopping DOM 'context-menu' event from firing */
            ev.stop();

});

google.maps.event.addListener(map, 'click', function () {

    HideContextMenuGoolge(ContextMenu);
});
}

Ожидаемое поведение (Снимок экрана из Chrome в Mac):

enter image description here

Что на самом деле происходит (Снимок экрана из Chrome в Windows):

enter image description here

1 Ответ

0 голосов
/ 20 декабря 2018

Я протестировал это решение как в FireFox, так и в Google Chrome, поэтому просто добавьте этот фрагмент кода в самый верх вашего js-файла:

window.onload = (function(){
    document.addEventListener("mouseup", function(evt){
        console.log(evt)
        evt.preventDefault();
        evt.stopPropagation();
    });
    document.addEventListener("contextmenu", function(evt){
      console.log(evt);
      evt.preventDefault();
      evt.stopPropagation();
  });
})();

Также удалите ev.stop() method, так как он не будетДелать что-нибудь.Увидеть ниже.

JavaScript в браузере управляется событиями, что означает, что JavaScript реагирует на взаимодействия путем генерации событий и ожидает, что программа будет прослушивать интересные события.Пользовательские события (такие как события «щелчка» мыши) передаются из DOM в JavaScript API Карт. Эти события отличаются от стандартных событий DOM.

См. Эту ссылку для ссылки выше

Также обратите внимание, что отключение right-click event через contextmenu в браузере не может быть идеальным решением.Я предлагаю дополнительные исследования на вашей стороне.

...