Pull to refresh

Comments 76

ну это издержки защиты ))
То же самое было в моих предыдущих топиках — пришлось ссылку приводить в тексте.
а для тех кто не силён в яваскрипте поясните пожалуйста )
А для тех кто не силён в яваскрипте, это как бы и не имеет особой силы =)
В описанном выше примере сообщение «Not IE!» появится только в случае… если броузер не IE.
ну я не настолько не компетентен и уж что такое alert знаю и что такое if else тоже )
-[1,] — механизм вот этой штуки поясните и все.
Я так дума, что просто IE считает, что после «1» в массиве должен быть еще один элемент, ибо стоит запятая. А его нет.
Другие браузеры не обращают внимания, а он — спотыкается.
Именно так. Так же как IE выдаст ошибку и на такую конструкцию:
{name1:val1,name2:val2,}
Нет, не так. Во первых IE не «спотыкается» на запятой, а считает её признаком ещё одного элемента, не более. Во вторых конструкция

{name1:val1,name2:val2,}

выдаст ошибку не из за запятой а из за того что в хэше, где используется сочетание ключ: значение в отличие от массивов, не будет найден очередной ключ.
спотыкается и выдает null или undefined, а минус перед массиво преобразует это в число. в ноль.

В противном случае единственный элемент массива преобразуется в число и мы получаем -1, что в условии проходит.
Internet Explorer прибавляет пустой элемент массива к общему числу элементов.Типо странинный баг-фича.
Обычные браузеры при таком определении решат, что это число и получат "-1", а ИЕ — нет, поэтому он не сможет применить операцию "-". Как-то так, а по ссылке в посте все подробно расписано.
благодарю ) теперь логично ) а то минус к массиву мну просто смутил )
UFO landed and left these words here
Фишка в запятой после последнего элемента массива. По стандарту ECMAscript, одна запятая в конце игнорируется — это сделано для удобства записи в столбик, автогенерации и прочего. В Internet Explorer эта запятая добавляет пустой элемент. Итого во всех браузерах кроме internet explorer получится массив из одного числа. Минус перед массивом преобразует его в число. Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется, результатом будет значение «NaN», которое в условии «if» считается за «false». У всех остальных браузеров получится -1, которая считается за «true». Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
спасибо ) старая привычка ms понимать стандарты по своему видать.
Здесь дело не в стандартах. В IE используется Jscript, в FF и Webkit — Javascript и только в Opera — ECMAscript. Так что если говорить про стандарты, то кроме Opera никто их не поддерживает.
> Вот такие вот забавные документированные баги. Почему не убрали — непонятно :(.
Не убрали, чтобы самим быстро определять где же они, пользователи ИЕ :)
Ну почему же? Вполне стандартная политика Микрософта, заключается в следовании подходу «работает — не трожь». То есть вместо переписывания бажного куска они просто предлагают альтернативный вариант решения.
Для обратной совместимости это хорошо, а вот в конечном счете для разработчиков системы это плоховато. Впрочем они обычно в случае, когда багов и хитроумных способов их обойти становится слишком много, просто предлагают перейти на новую технологию и начать с чистого листа.
Поясняю: «Массив из двух элементов, получившийся у Internet Explorer, в число не преобразуется» потому как при развертывании в IE мы получим не 1 а 1 с запятой, так как будет иметь место перечисление элементов — единицы и второго, несуществующего.
Никогда бы не подумал, спасибо. Сохранил.
По моему, проще запомнить %)
Зачастую, для современного человека эти два слова равнозначны :)
По ссылке на блог Aleko можно найти разъяснение механизма работы.
UFO landed and left these words here
интересно, а демосцена на яваскрипте есть?
Думаю, написание standalone букмарлетов близко по духу, там ограничение в ~2 кило символов.
Некоторые читерят с помощью createElement('script') ;)
UFO landed and left these words here
Есть! И ещё какая! Например, p01 взял старую 4к интруху «полет над Марсом» и засунул в 256b JS! Там битвы похлеще прежних (:
bash.org.ru цитата №97364
В Опере есть возможность «Представиться как IE Explorer». Звучит как «Прикинуться дурачком»
даже не просьба, скорее напоминание… если вам понравился коммент — плюсаните и в карму: это очень поможет тем, кто оказался не удел из-за одного неудачного топика.
также из-за одного неудачного комментария =)
мда… спасибо за минусы, но я имел в виду не столько этот комментарий))) no one cares…
Ну плюсы вроде как некультурно просить, не важно к какому топику\комментарию. :)
первое правило бойцовского клуба — никогда не рассказывать про бойцовский клуб:)
тоже самое и с кармой)
к счастью всёже можно отличить Оперу в ИЕ моде, от ИЕ, по заголовкам…
А мы заголовки proxomitron-om подправим…
UFO landed and left these words here
Занятно, обычно я ссылаюсь на Хабр, а тут наоборот — копипастят у меня :) Приятно.
Пипец! Чем тупее бага, тем элегантней решение!
с одной стороны гениально. с другой, если завтра js в webkit или mozilla вдруг начнёт вести себя аналогичным образом, придётся всё переделывать. так что гениальность сродни баяну

function getTomorrowDate() { sleep(86400); return strftime("%D"); }
UFO landed and left these words here
До этого, помню, самый короткий код что я видел:

if('\v' == 'v') { // IE

}
Проверки основанные на ошибках, оригинально. К хорошему это не приводит. А на других, более серьезных языках автор данного варианта также программирует? Вот что интересно:-) Во многих компаниях за варнинги уже по голове не гладят, а тут такое. Да и почему только IE, многие вещи к примеру могут заработать во всех кроме FireFox или Opera, а бывают моменты, что для каждого браузера своя реализация нужна и куча подобных багов браузеров снесет башню новому программисту, которому придется курить код.
Угу. Решение из разряда сегодня работает, завтра не знаю. Выйдет какой-нить очередной патч или сервис-пак и вдруг работать перестанет.
Это же не production код, это лишь разминка для мозгов!
Помнится у меня при такой ошибке не создавались обьекты. А в опере выдается ворнинг.
А в какой версии Opera выдавались предупреждения? Я проверял в 9 (кажется финальной девятой) и 10 версиях — хак не вызывал никаких отрицательных эмоций у браузера )
Красиво, но в последующих версиях IE может перестать работать.
Очень может быть, так как майкрософтовцы обещали сильно переписанный js движок в 9 IE, так что остается надеяться на то, что именно такие устоявшиеся безобидные помарки останутся.
UFO landed and left these words here
IE о как был ослом так ослом и останется. В этом я уверен практически полностью. Несоответствия будут всегда.
Кстати, обсуждение этой «фичи» (про добавление пустого элемента) было уже на хабре, странно, что только сейчас способ определения ИЕ через него придумали
habrahabr.ru/blogs/javascript/67567/
UFO landed and left these words here
Не устраивают штатные средства как раз тем, что они штатные (и зачастую очень уж некомпактные). Писать такие хаки — спорт и искусство. Мне это доставляет удовольствие.
Большое спасибо всем за комментарии. К сожалению инвайт я получил только сейчас и не успел отписаться первым.
Я так понимаю, что это работает на всех версиях ИЕ?
Точно) Я проверил на всех версиях, а так же в последних версиях Safari, FF, Chrome, Opera.
Я предпочитаю скрипт для IE грузить на уровне заголовка страницы.
Если IE — грузим ie.js
ИМХО — так проще…
Зачем другим браузерам вообще парсить и грузить код, который нужен експлореру?

хотя определение — зачетное… правда прослужит ли оно в новых експлорерах?
UFO landed and left these words here
А если убрать знак восклицания и написать просто «Ne IE» то будет еще короче!!1
А разве надо было? Блин, я забыл.
Sign up to leave a comment.

Articles