Javascript.RU

Internet Explorer 8 и W3C-стандарты

IE8 logo

Допустим вы создаете какой-то административный интерфейс и перед вами не стоит задача обеспечить работу в Internet Explorer версии 6 и 7. Тогда вы можете себе сильно облегчить задачу, предварительно «научив» IE8 работать по стандартам.

Как это возможно? Да очень просто, в IE8 появилась поддержка prototype для объекта Event, добавлен объект Element, прототип которого так же доступен для модификации, а самое главное, была реализована поддержка одной очень полезной возможности ECMAScript 5defineProperty.

Object.defineProperty — это аналог, появившихся в Gecko-браузерах, методов __defineGetter__ и __defineSetter__.

Добавим свойство target для объекта-событие. Для этого нам понадобится реализовать getter, возвращающий свойство srcElement:

Object.defineProperty(Event.prototype, 'target', {
	get: function() {
		return this.srcElement;
	}
});

Теперь можно забыть о том, что для IE ссылку на элемент target нужно получать специальным образом. По такому же принципу легко реализовать, например, часто используемые свойства pageX и pageY.

Чтобы всегда выполнять отмену стандартного действия браузера и останавливать всплывание событий одним W3C-способом, добавми в прототип Event следующие методы:

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

А еще в Internet Explorer 8 можно внедрить поддержку Element Traversal.

Важно: прототип объекта Event и метод Object.defineProperty не доступны в QuirksMode.

+2

Автор: Dmitry A. Soshnikov, дата: 15 июня, 2009 - 11:33
#permalink

а самое главное, была реализована поддержка одной очень полезной возможности ECMAScript 5 — defineProperty

Ага, но только для DOM-объектов и window. Вот, не понятно, вроде MS решают иплементировать стандартное поведение, и снова отклоняются (что за привычка такая, а?). Какой такой сакральный смысл запрещать defineProperty для user-defined-объектов?


Автор: Octane, дата: 15 июня, 2009 - 16:55
#permalink

Да, жаль, что только для встроенных объектов доступно.
Еще не понятно, почему есть возможность создавать dontEnumerable сеттеры и геттеры, а для свойств и методов такая возможность не предусмотрена.


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2022 - 08:37
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 14:03
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
7 + 3 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
Octane
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum