… on the other hand…

Don't click here!
The Turtle
My CV.

Все как я люблю

by Dima on 09/26/2014

Сегодня страшно увлекательным образом потратил уйму времени.
Расскажу здесь:
Надо было сделать сайт. Быстро.
Я решил, что такой сайт проще всего и быстрее всего будет сделать на базе одного известного CMF’а (MODX Revolution).
Сайт я сделал. Он пока не запущен, потому не скажу какой, но все с сайтом хорошо.
И вот в какой-то момент, я не отследил в какой, перестали открываться Resources в этой самой CMF в Chrome. Я решил, что это пока не важно и продолжил доделывать сайт.
Сегодня выдалась свободная минутка и я решил, что негоже говорить редактору сайта в каком браузере ему работать. И решил выяснить причину.
Быстро причину выяснить не удалось. Весь JavaScript сжатый и разбираться с ним не хотелось. Тем более у меня beta-версия Chrome и проблема может быть с этим связана, думал я.
Решил, что можно пробежаться по всем браузерам, убедиться, что проблемы нет и забить.
Но не тут-то было. В новой Opera Resource не открылся тоже.
А это уже не порядок…
Разрешил MODX’у отдавать несжатый JavaScript, но беда, все висло в глубинах Ext JS’а.
Начал разбираться с ним. Нашел распакованные исходники Ext JS’а. Понял в каком месте проблема. Но никак не мог понять, откуда она там могла взяться.
Браузеры, как оказалось, висли при создании нового поля с вводом времени.
Ничего удивительного при этом создании не происходило. Разработчики Ext JS заносят в дата 01/01/2008 и дальше прибавляют в цикле по 15 минут занося в список время. И потом везде этот список используют. Сделано это, правда, немного через… Ну наверное разработчики что-то очень крутое думали, мне не понять. Кому интересно, вот здесь можно код глянуть (искать generateStore). Создают список, по каким-то причинам, не добавляя милисекунды, а используя setMinutes. Вот здесь кто-то рекомендует такой метод, так что он, не нов. Хотя лично я такое не использовал (кажется).
В общем, на первый взгляд все нормально. Но, вот незадача, случался вечный цикл. Список возможных времен рос и рос. Я написал маленькую функцию, что проверить, что происходит.
Такую:

(function() {
var foo = new Date(2008,0,1,22,00,0,0);
console.log(foo);
foo.setMinutes(60);
console.log(foo);
foo.setMinutes(60);
console.log(foo);
})();

И проверил… В Firefox выводится:
Date {Tue Jan 01 2008 22:00:00 GMT+0300}
Date {Tue Jan 01 2008 23:00:00 GMT+0300}
Date {Wed Jan 02 2008 01:00:00 GMT+0400}
В целом, как и ожидалось, хотя прыжок временной зоны несколько настораживает.
А вот в Chrome:
Tue Jan 01 2008 22:00:00 GMT+0300 (RTZ 2 (зима))
Tue Jan 01 2008 23:00:00 GMT+0300 (RTZ 2 (зима))
Tue Jan 01 2008 23:00:00 GMT+0300 (RTZ 2 (зима))
и в Opera:
Tue Jan 01 2008 22:00:00 GMT+0300 (RTZ 2 (зима))
Tue Jan 01 2008 23:00:00 GMT+0300 (RTZ 2 (зима))
Tue Jan 01 2008 23:00:00 GMT+0300 (RTZ 2 (зима))

В общем, что-то явно не-то.
Не могу, к сожалению, проверить в Safari (оно тоже WebKit).
Кстати, в Chrome нормальной версии (без beta) под Windows 7 (не знаю, существенно ли это) все работает отлично.
Естественно, я отправил bug report в Chrome. Но вот в Opera отправить bug report нельзя. Так что, они так и будут с багом.
Вот теперь мне интересно, какое количество народу матерится на Opera и разные сайты из-за этого бага. Тем более, что используют такой прием со временем довольно часто.

Leave a Reply

Your email address will not be published. Required fields are marked *