Compartir a través de


Изменения в платформе IE8 RTM

Привет, я Крис Крюгер (Kris Krueger), главный тестер платформы Internet Explorer. Когда мы анонсировали выход RC-версии IE8, мы призвали владельцев сайтов, разработчиков ПО, дизайнеров и администраторов протестировать свои сайты в этой сборке и при необходимости внести изменения для обеспечения максимального удобства пользователей при работе с IE8. Мы заявили, что хотим и дальше получать от сообщества обратную связь, но также сообщили, что будем крайне осторожными в отношении изменений, вносимых в платформу. Это очень важный момент. Нам очень не хотелось ставить подножку разработчикам, фундаментально изменив методы поведения IE. Хотя мы обязались исправить наиболее критичные проблемы, в особенности уделить внимание проблемам безопасности, обратной совместимости и соответствию утвержденным стандартам. И сегодня я расскажу о важных изменениях в платформе, которые были сделаны в этих областях.

Безопасность

В IE8 Beta 1 мы решили проблему раскрытия информации, когда JavaScript мог считывать атрибут .value загруженного файла и определять полный локальный путь к файлу, который мог включать в себя такую информацию, как имя пользователя, папка профиля и так далее. Точнее мы изменили значение опции безопасности зоны Internet «включать путь к локальному каталогу при загрузке файлов на сервер» с «Разрешить» на «Запретить». Таким образом, вместо того, чтобы посылать имя файла как C:\users\bill\desktop\temp\upload.txt мы посылаем просто upload.txt.

В течение нескольких последних месяцев мы сталкивались с большим количеством сайтов (например, сайтов образовательных продуктов, сайтов по обмену фильмами, и так далее) и устройств (в основном, популярными домашними роутерами), которые это улучшение безопасности сводят на нет, так как сайты используют JavaScript для обработки имени файла и определений установленных разрешений. В большинстве случаев скрипт пытался получить indexOf() последнего символа REVERSE_SOLIDUS (\) в строке, и так как теперь IE возвращает только имя файла, эти скрипты не могут обработать строку и выражают пользователю свое недовольство.

Например, вот снимок диалогового окна, возникающего при попытке обновить прошивку роутера после нажатия кнопки начала обновления:

clip_image002

Очевидно, что в данной ситуации пользователь едва ли сможет разобраться, в чем заключается проблема. И хотя мы бы предпочли, чтобы разработчики сами исправили неправильные скрипты, в некоторых случаях это может оказаться реально сложной задачей. Например, в случае с роутером пользователю нужно было бы обновить прошивку, чтобы получить исправление, но именно код обновления прошивки и неисправен!

В свете данных событий мы начали искать решения проблемы. Одним из вариантов решения является подстановка обманного пути к имени файла, так чтобы скрипт продолжал работать. Мы хотели использовать префикс, который будет наглядным (то есть, чтобы он мог быть найден любым озадаченным веб-разработчиком, разбирающимся в проблеме) и простым (то есть, не содержал специальных символов), так как код обработки, которому мы пытаемся помочь, не слишком сложный.

Во время нашего расследования мы узнали, что разработчики альфа-версии Opera 10 уже сделали свой выбор в пользу решения данной проблемы, хотя вместе с тем их префикс (C:\fake_path\) включает в себя символ нижнего подчеркивания, чего мы хотели избежать, так как не хотели использовать специальные символы и хотели, чтобы путь к файлу содержал менее восьми символов.

Мы решили подставлять путь C:\fakepath\, чтобы нивелировать данной проблемы с совместимостью. Это решение используется только в атрибуте value, сам запрос на сервер не посылается.

Обратная совместимость

Во время цикла тестирования Beta и Release Candidate, мы просили, чтобы вы передавали нам данные через канал обратной связи сайта Microsoft Connect. В финальной версии IE8 мы исправили большинство основных проблем платформы, обнаруженных при использовании RC-сборки. Эти проблемы стали приоритетными в связи с громадным количеством голосов от сообщества.

Идентификатор данных обратной связи

Описание проблемы

406278

Если за <a> текста нет, то ссылка чрезмерно растягивается

414825

Ширина TextArea в 100% перерисовывает страницу

409478

IE некорректно декларирует значения, возможно завися от <col></col>, и возвращает чистую страницу

412015

Очень медленная реакция на сайтах, созданных с помощью рабочей среды JS

413508

Ошибка JavaScript движка IE8 RC1

413587

overflow:auto создает полосу прокрутки, даже если переполняющий элемент находится внутри overflow:hidden

414849

Фоновое изображение отображается неправильно или не отображается вообще

415317

RC1-cборка 18372 (абсолютное позиционирование) Изображение неожиданно обрезается после проведения над ссылкой

415727

IE8 RC1 (режим стандартов) тег SCRIPT вызывает ошибку серьезной регрессии состояния выравнивания

415039

Фоновое изображение body не отображается, если явно не указано body.style.height='100%'

Мы также получили массу просьб вернуть версию функций DOM, которую ранее добавили в режим Quirks в IE8 и режим стандартов IE7.

Ниже представлен список функций, которые были удалены из режима стандартов IE7, чтобы улучшить совместимость с IE7.

· Объекты JSON теперь скрыты

· [DOM object].toString() снова заменено на "[object]", как в IE7

· API object.defineProperty/object.getOwnPropertyDescriptor теперь скрыты.

Стандарты

В рамках наших обязательств в отношении стандартов мы исправили небольшое количество тестов, перечисленных в официальном тестовом пакете W3C CSS 2.1.

Перед началом прохождения тестов убедитесь, что выполнены предварительным условия, перечисленные в Windows Internet Explorer Testing Center.

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t090501-c414-flt-ln-00-d.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t090501-c414-flt-ln-02-d.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t090501-c414-flt-ln-01-d-g.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t0803-c5504-imrgn-l-05-b-ag.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t1008-c44-ln-box-03-d-ag.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/page-margin-000.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/page-margin-001.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/page-margin-002.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t051103-dom-hover-02-c-io.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t051103-dom-hover-01-c-io.htm

https://www.w3.org/Style/CSS/Test/CSS2.1/current/html4/t1605-c545-txttrans-00-b-ag.htm

После выпуска RC-сборки мы внимательно прислушивались к данным обратной связи о нашей реализации DOM-памяти HTML5. Мы среагировали на отзывы, внеся два изменения в реализацию хранилища DOM в IE8, чтобы соответствовать спецификациям HTML5. Первое состоит в том, что теперь IE возвращает значение null, а не undefined для ключей, которые не существуют в хранилище DOM. Второе изменение состоит в том, что мы удалили свойства length и remainingSpace при взаимодействии с хранилищем DOM, используя оператор for..in. Также из IE8 мы удалили двоичные интерфейсы IDOMStorage и IEnumDOMStorage.

Спасибо всем за отзывы, они помогли нам сделать IE8 лучше!

Крис Крюгер (Kris Krueger),

главный тестер Internet Explorer

Comments