Как я могу различать клавиши слева и справа, ctrl и alt onkeyup в Chrome с помощью Javascript

ОБНОВЛЕНИЕ: этот вопрос не является дубликатом другого вопроса. Он не имеет ответа в другом месте.

Я был вдохновлен этим вопросом Может ли javascript указать разницу между клавишей сдвига влево и вправо?, чтобы сделать класс ввода клавиатуры для набора игр, чтобы отличить нажатия клавиш для отдельных клавиш.

В то время как теги onkeydown и onkeyup в javascript имеют одинаковые коды ключей для left shift или right shift, а также left ctrl/right ctrl и left alt/right alt.

В ответ на вышеупомянутый вопрос современные браузеры теперь возвращают event.location, указывая, остаются ли эти ключи влево или вправо. IE и Firefox возвращают соответствующее значение местоположения для этих ключей onkeydown и onkeyup.

Но Chrome дает только правильное значение onkeydown. В Chrome shift, ctrl и alt все указывают местоположение onkeyup of KeyboardEvent.DOM_KEY_LOCATION_STANDARD, которое неоднозначно.

Вот пример sandbox: jsfiddle.

Если вы нажмете shift, ctrl или alt, onkeydown location будет корректно отображаться в Chrome (и во всех других браузерах), но в Chrome onkeyup location будет "стандартным".

соответствующий код:

window.onkeydown = function(event)
{
    var o = 'event = onkeydown, which = ' + event.which + ', location = ';

    switch(event.location)
    {
        case KeyboardEvent.DOM_KEY_LOCATION_STANDARD: o += 'standard'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_NUMPAD: o += 'numpad'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_LEFT: o += 'left'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_RIGHT: o += 'right'; break;
    }

    var outputSpan = document.getElementById('output');

    outputSpan.innerHTML = o;
};

window.onkeyup = function(event)
{
    var o = 'event = onkeyup, which = ' + event.which + ', location = ';

    switch(event.location)
    {
        case KeyboardEvent.DOM_KEY_LOCATION_STANDARD: o += 'standard'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_NUMPAD: o += 'numpad'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_LEFT: o += 'left'; break;

        case KeyboardEvent.DOM_KEY_LOCATION_RIGHT: o += 'right'; break;
    }

    var outputSpan = document.getElementById('output');

    outputSpan.innerHTML = o;
};

Является ли это ошибкой или каким-то желаемым поведением? В свете этого есть ли другой способ отличить левую и правую стороны от клавиатуры?

UPDATE:

Я работал над этим, слушая, с какой стороны пришел keydown, вспомнив об этом, и предположив, что последующий keyup появился с той же стороны. Это не здорово, так как это не всегда верно все время.

Этот вопрос не является дубликатом Как узнать, произошло ли событие из правой клавиши Ctrl?, в котором спрашивали, как отличить left-ctrl от right-ctrl прессы. На этот вопрос действительно ответил вопрос, на который я первоначально ссылался: Может ли javascript указать разницу между левой и правой клавишей сдвига?

Это, по-видимому, является дефектом, специфичным для Chrome, в их поведении API, и поскольку в нем нет полного рабочего процесса, я могу опубликовать отчет об ошибке с проектом Chromium.