Злой плагин для jQuery
SUMMARY
A jQuery plugin for crashing IE6. That’ll teach those motherf!%@*#s to upgrade their s#*t.
http://plugins.jquery.com/project/crash
О плагине я узнал сегодня на хабре. В документации подробно описывается, как им пользоваться.
USAGE
To crash IE6 call
$.crash();
В jQuery добавляется метод crash(), вызов которого валит IE6 вот так:

Что же именно приводит IE6 к такому конфузу? Я скачал плагин и стал изучать его исходный код…
/** * jQuery Crash (http://mktgdept.com/jquery-crash) * A jQuery plugin to crash IE6. * * v0.0.2 - 5 March 2010 * * Copyright (c) 2009 Chad Smith (http://twitter.com/chadsmith) * Dual licensed under the MIT and GPL licenses. * http://www.opensource.org/licenses/mit-license.php * http://www.opensource.org/licenses/gpl-license.php * * Use $.crash(); * **/ ;jQuery.crash=function(x){for(x in document.open);};
То есть вот этот код IE6 выполнить не может:
for(x in document.open);
Для тех кто не очень хорошо знаком с JavaScript, цикл for-in – это обход всех свойств объекта. Вообще document.open – это функция, которая открывает новое окно по указанному URL (MSDN). Но JavaScript позволяет использовать функции и как объекты в том числе. То есть на функции можно вешать разные свойства и это будет корректно с точки зрения языка.
Например, такой код покажет окошко с текстом «document.open.kuku = Ku-ku!» в Гугл Хроме. IE6 тоже покажет окошко, но другое (то, что в начале статьи).
document.open.kuku = "Ku-ku!"; for(x in document.open) { alert('document.open.' + x + ' = ' + document.open[x]); }
(*) вызов document.open.kuku эквивалентен вызову document.open['kuku'] в JavaScript

У меня нет IE6, так что не могу проверить, распространяется ли эта особенность на такие функции, как document.getElementById() и вообще любые функции. Если у кого-то есть старый добрый злой ослик, проверьте и напишите. Мне весьма любопытно)
И, конечно, любопытна сама идея такого плагина-стимулятора. Хотя, сомневаюсь, что кто-то пользуется IE6 от хорошей жизни. Вряд ли стоит ее омрачать еще больше.
Recent Comments