¿A qué tecla se refiere e.metaKey en JavaScript MouseEvent?

MouseEvent.metaKey no parece funcionar. Tanto en Firefox como en Chrome, devuelve false incluso si mantengo presionada la tecla Win mientras hago clic en:

 <!doctype html> <button onclick=alert(event.metaKey)>click while holding "meta key"</button> 

MDN dice :

La propiedad de solo lectura MouseEvent.metaKey devuelve un Boolean que indica si la tecla Meta fue presionada ( true ) o no ( false ) cuando ocurrió el evento.

Nota: en los keyboards de Macintosh, esta es la tecla de command ( ). En los keyboards de Windows, esta es la tecla de Windows ( ).

Compatibilidad del browser

enter image description here

MDN afirma que MouseEvent.metaKey es compatible con FireFox y Chrome, pero no está funcionando.

¿A qué tecla se refiere MouseEvent.metaKey ?

¿Por qué el código anterior no funciona?

Si está preguntando qué tecla debe presionar en un sistema Windows para que la propiedad metaKey MouseEvent sea true , la respuesta es que depende del browser. Y algunos browseres de Windows simplemente no lo admiten y siempre devuelven false o undefined .

No pude encontrar un cuadro actualizado de compatibilidad con browseres para metaKey , aunque hay uno muy antiguo en QuirksMode.org .

Si está utilizando jQuery, metaKey es una de las properties de evento que normaliza para la compatibilidad entre browseres .

Si necesita implementar un evento key + mouse para alguna funcionalidad en su website, usaría la tecla Shift para que funcione en todos los sistemas. (Si necesita más de una opción key, le sugiero que reconsidere su layout).

Pruebas empíricas, muestra los siguientes resultados. No es que jQuery no haga un trabajo terriblemente bueno de normalizar ^ F.

En una Mac, en Safari versión 5.1.7 y 6.0.

  F Keypress: 102, 102 ⌘F Keypress: 102, 102 meta ⌥F Keypress: 402, 402 alt ⌃F Keypress: 6, 6 ctrl ⇧F Keypress: 70, 70 shift 

En una Mac, en Firefox 15.0.1:

  F Keypress: 102, 0 ⌘F Keypress: 102, 0 meta ⌥F Keypress: 402, 0 alt ⌃F Keypress: 102, 0 ctrl ⇧F Keypress: 70, 0 shift 

En una Mac, en Google Chrome 18.0.1024.168:

  F Keypress: 102, 102 ⌘F (No triggers sent for ⌘ + key) ⌥F Keypress: 402, 402 alt ⌃F Keypress: 6, 6 ctrl ⇧F Keypress: 70, 70 shift 

Código de testing: // jquery-1.7.2

  $(document.defaultView).keypress(function(e) { console.log("Keypress: " + e.which + ", " + e.keyCode, " " + (e.metaKey ? "meta " : "") + (e.ctrlKey ? "ctrl " : "") + (e.altKey ? "alt " : "") + (e.shiftKey ? "shift " : "")); }); 

¿A qué tecla se refiere MouseEvent.metaKey?

Se refiere a la key de Windows Clave de Windows

¿Por qué el código anterior no funciona?

Debido a un error como mínimo de Firefox 48, consulte los documentos para get más información.

Una solución :

Use shiftKey en su lugar. Que tiene una propiedad con el mismo nombre en el object de evento.