Блокировать правые клики на холсте с контекстом WebGL

Я хочу, чтобы правая кнопка мыши на холсте HTML5 не вызывала контекстное меню, так как это мешает играм, управляемым мышью.

Я попытался добавить oncontextmenu="return false;" к атрибутам тега canvas. Это работает, когда холст использует 2D-контекст, но нет, когда он использует контекст WebGL, как в Firefox, так и в Chrome.

Это как-то предусмотрено стандартом или это две одновременные ошибки браузера? Есть ли способ обойти это и заблокировать правый клик в контексте WebGL?


person AshleysBrain    schedule 03.12.2011    source источник
comment
вам нужно сделать это с помощью старого обработчика правого клика (e.preventDefault(), e.stopPropagation())   -  person noob    schedule 03.12.2011
comment
поскольку это действительно не вопрос WebGL, почему бы не изменить вопрос на что-то более общее, например, заблокировать правый клик в браузере или запретить контекстное меню в браузере? Просто идея.   -  person gman    schedule 05.12.2011


Ответы (2)


Результаты могут различаться в зависимости от браузера, поэтому убедитесь, что это работает во всех целевых браузерах. Я пробовал только в Хроме.

  yourCanvas.addEventListener('contextmenu', function(e) {
      if (e.button === 2) {
       e.preventDefault();
        return false;
      }
  }, false);

Рабочий пример: http://jsfiddle.net/cK9Rt/

(в консоли будет написано «тест», но контекстное меню не появится)

person Simon Sarris    schedule 03.12.2011
comment
Я пробовал это на Chrome 15, и это вообще не работает. Функция, похоже, никогда не вызывается. - person AshleysBrain; 04.12.2011
comment
И как идет стройка? Видел ваш последний пост на HN об этом. Я хотел бы знать, как идут дела и с какими проблемами вы двое сталкиваетесь. - person Simon Sarris; 04.12.2011
comment
Ха, странно, ваш код jsfiddle работает, но не когда я вставляю его в свой код. Я поиграю. Строительство идет хорошо, загляните на форум и поздоровайтесь, если хотите :) - person AshleysBrain; 04.12.2011
comment
Отличная статья: Не злоупотребляйте возвратом False. - person Sasha; 16.01.2016

Я использую следующий код при блокировке действия браузера по умолчанию

element.onevent=function(e){
    e.preventDefault();
    return false;
}

Этот код гарантирует, что действие по умолчанию не произойдет.

никогда не используйте атрибуты html, чтобы предотвратить значение по умолчанию.

Когда я увидел ваш вопрос, я попробовал это при тех же обстоятельствах:

canvas.oncontextmenu=function(e){
    e.preventDefault();
    return false;
}

И он работал именно так, как должен.

Я надеюсь, что это поможет любым будущим зрителям этого вопроса

person Braden Best    schedule 09.12.2012