keydownイベントでpreventDefault()した際のkeypressイベントの扱いがブラウザによって異なる

こんな感じのコードで検証。

window.onload = function () {
    var body = document.body;
    body.onkeydown = function (e) {
        if (window.event) {
            window.event.returnValue = false;
        } else {
            e.preventDefault();
        }
        console.log('keydown');
    }
    body.onkeyup = function () {
        console.log('keyup');
    }
    body.onkeypress = function () {
        console.log('keypress');
    }
}

IE9とChrome24ではkeypressイベントが発生しないが、Firefox18ではkeypressイベントが発生する。ちなみkeyupイベントはIE/Chrome/Firefoxどのブラウザでも発生した。