Pergunta

Certo, vamos divulgar o caminho primeiro. Sim, eu quero ocultar o menu de contexto. Não, não estou tentando impedir que alguém levante o conteúdo da minha página. Seu uso pretendido é entrada para um jogo de navegador e será limitado a uma área específica na página da web.

Movendo -se do ideológico para o técnico ...

var mouse_input = function (evt) {
    // ...
    return false;
}

document.onmousedown = mouse_input; // successful at preventing the menu.
document.addEventListener('mousedown', mouse_input, true); // unsuccessful

Alguém poderia me explicar por que o addEventListener A versão não pode impedir que o menu de contexto seja disparado? A única diferença que pude ver em Safári's Inspetor da Web foi isso document.onmousedown tinha um isAttribute valor que era verdade enquanto o addEventListener A versão tinha o mesmo valor que false.

Foi útil?

Solução

Então, minha pesquisa infrutífera de repente se tornou frutífera.

var mouse_input = function (evt) {
    evt.preventDefault();
}

document.addEventListener('contextmenu', mouse_input, false);

Trabalha para Safári, Raposa de fogo, Ópera. preventDefault() impede que as ações usuais aconteçam. Eu tive que mudar o evento que foi ouvido para acomodar Safári E é mais lógico de qualquer maneira. Mais informações: funções que implementam EventListener não deve retornar valores então return false não teve efeito.

Outras dicas

Para explicar a diferença .. element.onmousedown = somefunction; é uma atribuição absoluta; tu es substituindo o manipulador de eventos no elemento. element.addEventListener(...) é, como o nome indica, adicionando um manipulador, além de qualquer manipulador já anexado para o evento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top