Прототип JavaScript Event в IE8

Я пытаюсь добавить метод к прототипу Event. Чтобы вызвать/установить preventDefault()или, на языке IE returnValue = falseи, при желании, stopPropagation()/ cancelBubble = верно;. Я думал, что приведенного ниже кода будет достаточно.

Event = Event || window.Event;
//^^ makes the fiddle work on IE8 ^^
if(!(Event.prototype.stopEvent))
{
    Event.prototype.stopEvent = function(propagate)
    {
        "use strict";
        propagate = (propagate ? true : false);
        if (this.preventDefault)
        {
            this.preventDefault();
            if (propagate === false)
            {
                this.stopPropagation();
            }
        }
        else
        {
            this.returnValue = false;
            this.cancelBubble = !propagate;
        }
        return this;
    };
}

Кажется, это работает, как вы можете видеть здесь.Эта скрипта показывает OKв IE8, Firefox и Chrome. Хотя, когда я добавляю это в свой скрипт, IE8 прерывается на первой строке, говоря 'Событие не определено'. Отсутствие "use strict";не имеет никакого значения.

С неохотой я попробовал и это:

if (typeof Event === 'undefined')
{
    var Event = window.Event || window.event;//FFS IE :-(
}

Но безрезультатно: Ошибка: 'Event.prototype' is null or not a object, поэтому я продвинулся на 1 строку дальше. Дело в том, что весь метод прототипа — это копипаста из моего скрипта, но что я здесь упускаю из виду? Есть идеи/предложения?
Спасибо

PS: Мне нравится Pure JavaScript, поэтому, пожалуйста, не предлагайте jQuery, прототипы, додзё,... в качестве решения. Я только что избавился от jQuery. (Мне нравится jQuery, но в данном случае он не нужен)


Обновление

Боюсь, дела пошли хуже. Я нашел эту ссылку MSDN . Вся страница посвящена прототипам элементов DOM. Будет справедливо сказать, что они доступны и могут использоваться в IE8 (в некоторой степени). На этой странице мне бросился в глаза следующий код:

Event.prototype.stopPropagation = function ()
{
  this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
  this.returnValue = false;
};

Его можно найти примерно на 3/4 страницы вниз, в разделе под названием «Мощные сценарии». На мой взгляд, это то же самое, что я хочу сделать, но более того: если я попробую этот код через jsfiddle, он даже не сработает, тогда как мой jsfiddle (с моим кодом) работал в IE8. Это только последние несколько строк фрагмента, но, насколько я понимаю, эти несколько строк кода должны работать нормально. Я изменил их следующим образом:

Event.prototype.stopPropagation = function ()
{
    if (this.stopPropagation)
    {
        return this.stopPropagation();
    }
    this.cancelBubble = true;
};
Event.prototype.preventDefault = function ()
{
    if (this.preventDefault)
    {
        return this.preventDefault();
    }
    this.returnValue = false;
};

5
задан Elias Van Ootegem 17 May 2012 в 03:29
поделиться