Cómo generar un evento de clic derecho en todos los navegadores
-
21-09-2019 - |
Pregunta
Un pequeño contexto:
La aplicación en la que estoy trabajando tiene un menú contextual de clic derecho para ciertos objetos en la pantalla. El diseño actual, ya que cada uno de estos objetos escucha un clic derecho, envía una solicitud AJAX para obtener los datos de contexto para ese objeto, usa esos datos para crear un PopUpMenu2 desde Dojo 0.4.3 (¡lo sé!), Y luego genera Un clic derecho para iniciar el menú Dojo.
Estoy tratando de encontrar una manera de generar un evento de clic derecho para todos los navegadores. Actualmente, solo admitemos IE y usamos el evento OnContextMenu.
Restricciones:
- No jQuery :(
- No puedo precargar todos los datos de los objetos en la pantalla para crear el menú Dojo y evitar la solicitud AJAX.
Solución
Esto debería hacer que comience con la generación de un evento de clic derecho. La clave para el clic derecho es el parámetro del botón: botón = 2.
if (document.createEvent) {
var rightClick = document.createEvent('MouseEvents');
rightClick.initMouseEvent(
'click', // type
true, // canBubble
true, // cancelable
window, // view - set to the window object
1, // detail - # of mouse clicks
10, // screenX - the page X coordinate
10, // screenY - the page Y coordinate
10, // clientX - the window X coordinate
10, // clientY - the window Y coordinate
false, // ctrlKey
false, // altKey
false, // shiftKey
false, // metaKey
2, // button - 1 = left, 2 = right
null // relatedTarget
);
document.dispatchEvent(rightClick);
} else if (document.createEventObject) { // for IE
var rightClick = document.createEventObject();
rightClick.type = 'click';
rightClick.cancelBubble = true;
rightClick.detail = 1;
rightClick.screenX = 10;
rightClick.screenY = 10;
rightClick.clientX = 10;
rightClick.clientY = 10;
rightClick.ctrlKey = false;
rightClick.altKey = false;
rightClick.shiftKey = false;
rightClick.metaKey = false;
rightClick.button = 2;
document.fireEvent('onclick', rightClick);
}
Sugeriría Googleing para 'Document.CreateEvent' y 'Document.CreateEteventObject' para obtener más detalles sobre la API de los sitios Mozilla y MSDN.
¡Espero que esto ayude!