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 сеттеры и геттеры, а для свойств и методов такая возможность не предусмотрена.


 
Поиск по сайту
Другие записи этого автора
Octane
Содержание

Учебник javascript

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

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

Интерфейсы

Все об AJAX

Оптимизация

Разное

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

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