Pregunta

Derecho Vamos a conseguir esto de la manera en primer lugar. Sí, quiero ocultar el menú contextual. No, no estoy tratando de evitar que el contenido de elevación a alguien de mi página. Su uso previsto es de entrada para un juego en el navegador y se limita a un área específica en la página web.

El paso de lo ideológico a la técnica ...

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

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

Podría alguien explicarme por qué la versión addEventListener es incapaz de detener el menú contextual de disparar? La única diferencia que fue capaz de ver en el Safari 's inspector web fue que tenía un valor document.onmousedown isAttribute que era verdad, mientras que la versión addEventListener tenía el mismo valor que falsa.

¿Fue útil?

Solución

Así que mi búsqueda infructuosa de repente se convirtió fructífera.

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

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

Obras de Safari , Firefox , Opera . preventDefault() detiene las acciones habituales suceda. Tenía que cambiar el evento que se escuchó para dar cabida a Safari y es de todos modos más lógico. Para más información: funciones que implementan EventListener no debe devolver valores tan return false no tuvo ningún efecto.

Otros consejos

Para explicar la diferencia .. element.onmousedown = somefunction; es una asignación absoluta; usted es reemplazando el controlador de eventos en el elemento. element.addEventListener(...) es, como su nombre implica, añadir un controlador, además de cualquier controlador (s) que ya está fijado para el evento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top