<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CTAPbIu_MABP&#039;s BLOG &#187; IE</title>
	<atom:link href="http://mabp.kiev.ua/tag/ie/feed/" rel="self" type="application/rss+xml" />
	<link>http://mabp.kiev.ua</link>
	<description>энтузиазм = 1/опыт © Старый Мавр</description>
	<lastBuildDate>Thu, 26 Jan 2012 10:34:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>polygonzo</title>
		<link>http://mabp.kiev.ua/2011/03/07/polygonzo/</link>
		<comments>http://mabp.kiev.ua/2011/03/07/polygonzo/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 19:37:11 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[SVG]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1330</guid>
		<description><![CDATA[Долго и нервно подрачивал на эту красоту. Оказалась авторы сделали из нее открытый проект. Не буду дразнить, вот ссылка на проект. Кстати не успел его найти как уже поправил в нем баг, такой же как в rocon'e. Походу у всех проблемы с IE9]]></description>
			<content:encoded><![CDATA[<p>Долго и нервно подрачивал на <a href="http://maps.google.com/help/maps/elections/#primary_results" rel="external nofollow">эту</a> красоту. Оказалась авторы сделали из нее открытый проект.</p>
<span id="more-1330"></span>

<p>Не буду дразнить, вот <a href="http://code.google.com/p/polygonzo/" rel="external nofollow">ссылка</a> на проект. Кстати не успел его найти как уже поправил в нем баг, такой же как в <a href="http://mabp.kiev.ua/2011/03/03/rocon-fix/">rocon'e</a>. Походу у всех проблемы с IE9</p>
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/03/07/polygonzo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>rocon fix</title>
		<link>http://mabp.kiev.ua/2011/03/03/rocon-fix/</link>
		<comments>http://mabp.kiev.ua/2011/03/03/rocon-fix/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 13:49:01 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[vml]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1329</guid>
		<description><![CDATA[Rocon это библиотека Сергея Чикуёнока для рисования круглых углов в IE. И хоть проект длавно забыт автором, я о нем вспоминаю когда кому-то из заказчиков хочется поиграть в парк юрского периода. Работает библиотека крайне хорошо, даже слишком хорошо. Это и будем править. Суть дела в том что в девятой версии осел все-таки научился поддерживать круглые [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/rocon/" rel="external nofollow">Rocon</a> это библиотека <a href="http://chikuyonok.ru/" rel="external nofollow">Сергея Чикуёнока</a> для рисования круглых углов в IE. И хоть проект длавно забыт автором, я о нем вспоминаю когда кому-то из заказчиков хочется поиграть в парк юрского периода.</p>
<span id="more-1329"></span>

<p>Работает библиотека крайне хорошо, даже слишком хорошо. Это и будем править. Суть дела в том что в девятой версии осел все-таки научился поддерживать круглые углы, а в rocon'e на версию проверки нет и он продолжает рисовать свои. Вот это и исправляем, добавляя в строку 1052.</p>

<pre><code class="javascript">
if (browser.msie &#038;& /(msie) ([\w.]+)/i.exec(navigator.userAgent)[2] < 9) {
</code></pre>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/03/03/rocon-fix/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Col/Colgroup</title>
		<link>http://mabp.kiev.ua/2010/03/02/col-colgroup/</link>
		<comments>http://mabp.kiev.ua/2010/03/02/col-colgroup/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 10:04:57 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[grid]]></category>
		<category><![CDATA[hate]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1217</guid>
		<description><![CDATA[Это еще один псот ненависти к IE, и родился он из первой же задачи на новом проекте. Смысл задачи в том что надо сделать скроллер у таблицы, тоесть есть табличка в которой 10 столбиков но показывать надо только 3 и есть кнопочка вперед/назад которая меняет видимые столбики. Ну на мой любимый затык с математикой и [...]]]></description>
			<content:encoded><![CDATA[<p>Это еще один псот ненависти к IE, и родился он из первой же задачи на новом проекте. Смысл задачи в том что надо сделать скроллер у таблицы, тоесть есть табличка в которой 10 столбиков но показывать надо только 3 и есть кнопочка вперед/назад которая меняет видимые столбики. Ну на мой любимый затык с математикой и крайними случаями у меня ушло всего два часа :( FAIL! А вот на то чтобы заставить исчезать столбики целых два дня.</p>
<span id="more-1217"></span>
<p>Как обычно я решил использовать самый современные технологии, например тэг COL для управления колонками, казалось бы что тут такого страшного, <a href="http://www.quirksmode.org/css/columns.html" rel="nofollow external">все его поддерживают</a>, да не все могут скрыть, ну да ладно в IE8 работает и этого достаточно. Набросал скриптик на <a href="http://mabp.kiev.ua/tag/jquery">jquery</a> вроде такого</p>

<pre><code class="javascript">
$("#myTbl")
    .find("col")
    .css({visibility:"collapse"})
    .slice(firstVisible, firstVisible + columns)
    .css({visibility:""})
</code></pre>

<p>я решил что все уже позади, но не тут то было. Во-первых <a href="http://mabp.kiev.ua/tag/jquery/">jquery</a> не может различить видимые и невидимые колонки, о чем я оставил камент на странице описания селектора :visible , но похоже разработчики посчитали что это <a href="http://forum.jquery.com/topic/visible-selector" rel="nofollow external">баг репорт</a> и удалили его. Во-вторых чертов IE8 хоть и умеет прятать колонки не может их правильно отрисовать после этого, получаеться что текст всех скрытых колонок отображаеться под текстом первой видимой в несколько слоев, это легко убрать всего лишь нажав ctrl+A, но сами понимаете - это не выход.</p>
<p>Результатом всех этих мучений стало то, что пришлось итерироваться по всем ячейкам таблицы и скрывать неугодные.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/03/02/col-colgroup/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Заткнись, Осёл!!!</title>
		<link>http://mabp.kiev.ua/2009/03/24/shut-up-dunkey/</link>
		<comments>http://mabp.kiev.ua/2009/03/24/shut-up-dunkey/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 12:18:52 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=925</guid>
		<description><![CDATA[Мне только что показали замечательный прикол, как подавить вывод ошибок в IE, в остальных браузерах естественно не работает. window.onerror = function(){return true;} После этого Ишак молчит как дохлая рыба :). Спасибо, NRG. UPD: По просьбе Dimox'а пример работы, смотреть естественно только в ишаке. jQuery().ready(function($){ $("#errors_on").click(function(){ window.onerror = function(){return false;} }); $("#errors_off").click(function(){ window.onerror = function(){return true;} [...]]]></description>
			<content:encoded><![CDATA[<p>Мне только что показали замечательный прикол, как подавить вывод ошибок в <a href="http://mabp.kiev.ua/tag/ie/">IE</a>, в остальных браузерах естественно не работает.</p>
<span id="more-925"></span>
<pre><code class="javascript">
window.onerror = function(){return true;}
</code></pre>

<p>После этого Ишак молчит как дохлая рыба :). Спасибо, NRG.</p>

<p><strong>UPD</strong>: По просьбе Dimox'а пример работы, смотреть естественно только в ишаке.</p>
<script type="text/javascript">
jQuery().ready(function($){
	$("#errors_on").click(function(){
		window.onerror = function(){return false;}
	});
	$("#errors_off").click(function(){
		window.onerror = function(){return true;}
	});
	$("#show_error").click(function(){
		throw "Error";
	});
});
</script>
<br />
<div style="text-align:center;">
<input type="button" value="Включить ошибки" id="errors_on"/>
<input type="button" value="Выключить ошибки" id="errors_off"/>
<input type="button" value="Сгенерировать ошибку" id="show_error"/>
</div><br /><br />]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/24/shut-up-dunkey/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IE мертв. Да здравствует IE!!!</title>
		<link>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/</link>
		<comments>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:05:50 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=912</guid>
		<description><![CDATA[Все бы уже с радостью похоронили IE6, но сдается мне что не с нашим счастьем. Ведь MicroSoft досих пор тянут за собой мертвый груз IE5.5 засовывая в проекты типа SharePoint вот такие замечательные куски кода. function DeferCall() { if (arguments.length == 0) { return null; } var args = arguments; var fn = null; if [...]]]></description>
			<content:encoded><![CDATA[<p>Все бы уже с радостью похоронили <a href="http://mabp.kiev.ua/tag/ie/">IE6</a>, но сдается мне что не с нашим счастьем. Ведь <a href="http://mabp.kiev.ua/tag/microsoft/">MicroSoft</a> досих пор тянут за собой мертвый груз <a href="http://mabp.kiev.ua/tag/ie/">IE5.5</a> засовывая в проекты типа SharePoint вот такие замечательные куски кода.</p>
<span id="more-912"></span>
<pre><code class="javascript">
function DeferCall() {
	if (arguments.length == 0) {
		return null;
	}
	var args = arguments;
	var fn = null;
	if (browseris.ie5up || browseris.nav6up) {
		eval("if (typeof(" + args[0] + ")=='function') { fn=" + args[0] + "; }");
	}
	if (fn == null) { return null; }
	if (args.length == 1) {
	 return fn();
	} else if (args.length == 2) {
		return fn(args[1]);
	} else if (args.length == 3) {
		return fn(args[1], args[2]);
	} else if (args.length == 4) {
		return fn(args[1], args[2], args[3]);
	} else if (args.length == 5) {
		return fn(args[1], args[2], args[3], args[4]);
	} else if (args.length == 6) {
		return fn(args[1], args[2], args[3], args[4], args[5]);
	} else if (args.length == 7) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6]);
	} else if (args.length == 8) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
	} else if (args.length == 9) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
	} else if (args.length == 10) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
	} else {
		var L_TooManyDefers_Text = "Too many arguments passed to DeferCall"
		alert(L_TooManyDefers_Text);
	}
	return null;
}
</code></pre>

<p>А все потому что <a href="http://mabp.kiev.ua/tag/ie/">IE5.5</a> не поддерживает метод Function.apply .</p>
<p>Хотя <a href="http://mabp.kiev.ua/tag/ie/">IE6</a> достал уже всех, вот например Apple сделал себе такую  <a href="http://www.mac.com/1/browser_req.html" rel="nofollow external">страничку</a>, на которой предлагает скачать что-нибудь по современние. Выглядит красиво даже в <a href="http://mabp.kiev.ua/tag/ie/">IE6</a>, но если посмотреть код то там все перехачено вдоль и поперек.</p>
<p>Вот эта страничка меня натолкнула на мысль сверстать похожий "надгробничек" дляя своих целей, используя все то, что использовали разработчики Apple, только без хаков. Смотрите сами что из этого <a href="http://mabp.kiev.ua/content/source/noie/ie.html" rel="nofollow">получилось</a></p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 8 вышел...</title>
		<link>http://mabp.kiev.ua/2009/03/19/internet-explorer-8-released/</link>
		<comments>http://mabp.kiev.ua/2009/03/19/internet-explorer-8-released/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 17:00:08 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=885</guid>
		<description><![CDATA[Качаем...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.microsoft.com/windows/internet-explorer/default.aspx" rel="nofollow external">Качаем...</a></p>

<div style="text-align:center"><img src="/content/img/IE.jpg" alt="IE"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/19/internet-explorer-8-released/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>IE8b1</title>
		<link>http://mabp.kiev.ua/2009/01/27/ie8b1/</link>
		<comments>http://mabp.kiev.ua/2009/01/27/ie8b1/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 08:49:15 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[Новости]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=573</guid>
		<description><![CDATA[Вчера пока я писал статью про цепи Маркова мелкомягкие выпустили IE8b1. О том что в нем нового можете почитать на ReadWriteWeb или на TechCrunch. Скачать новую версию можно с оф сайта, а от себя добавлю что на мою домашнюю машинку vista x64 у них русской версии нет, пришлось ставить английскую.]]></description>
			<content:encoded><![CDATA[<p>Вчера пока я писал статью про <a href="http://mabp.kiev.ua/2009/01/27/markovs-chains/">цепи Маркова</a> мелкомягкие выпустили <a href="http://mabp.kiev.ua/tag/ie/">IE8b1</a>. О том что в нем нового можете почитать на <a href="http://www.readwriteweb.com/archives/microsoft_releases_internet_explorer8_rc1.php" rel="nofollow external">ReadWriteWeb</a> или на <a href="http://www.techcrunch.com/2009/01/26/microsofts-ie8-release-candidate-is-live/" rel="nofollow external">TechCrunch</a>. Скачать новую версию можно с <a href="http://www.microsoft.com/windows/internet-explorer/beta/worldwide-sites.aspx" rel="nofollow external">оф сайта</a>, а от себя добавлю что на мою домашнюю машинку vista x64 у них русской версии нет, пришлось ставить английскую.</p>
<div style="text-align:center"><img src="/content/img/IE.jpg" alt="Firefox"/></div>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/01/27/ie8b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Checkbox+jQuery+IE6</title>
		<link>http://mabp.kiev.ua/2009/01/06/checkbox-jquery-ie6/</link>
		<comments>http://mabp.kiev.ua/2009/01/06/checkbox-jquery-ie6/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 10:18:29 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=411</guid>
		<description><![CDATA[Как же достал это злоебучий IE6!!! Недавно, а точнее неделю назад нашел баг, но локализировать и описать его время появилось тока сейчас. Задача была довольно простая, было две формы и набор checkbox'ов в котором храниться текущее состояние приложения, надо было его отправлять вместе с обоими формами, поэтому я разместил его в одной, а во второй [...]]]></description>
			<content:encoded><![CDATA[<p>Как же достал это злоебучий IE6!!! Недавно, а точнее неделю назад нашел баг, но локализировать и описать его время появилось тока сейчас. Задача была довольно простая, было две формы и набор checkbox'ов в котором храниться текущее состояние приложения, надо было его отправлять вместе с обоими формами, поэтому я разместил его в одной, а во второй на onsubmit повесил функцию которая забирает их из первой. Пока я разрабатывал под Firefox'ом, как бы все работало как часы, а когда тестеры тестировали под IE6 ничего не работало вообще. У меня естественно стоит IE8b2, потому что там консоль, и баги этой не видно, протестировать нормально нельзя. Начал дебажить java код и действительно данные от checkbox'ов не приходят, поставил снифер перед браузером - данные не отправлены. В общем через пол часа танцев с бубном я вычислил проблемный кусок кода. А теперь покажу его вам и покажу свой workaround, а вы если знаете лучший способ - напишите в каментах.</p>
<span id="more-411"></span>
<pre><code class="html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;head&gt;
&lt;title&gt;Checkbox+jQuery+IE6&lt;/title&gt;
&lt;script src="jquery-1.2.6.js"&gt;&lt;/script&gt;
&lt;script&gt;
$().ready(function(){
        $("#form1").submit(function(){
		$("#form2 :checkbox").remove().appendTo(this);
		//$(this).append($("#form2").html());$("#form2").html("") // IE6 fix
		return false;
        })
})
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form name="form1" id="form1" action=""&gt;
&lt;input type="submit" name="submit" value="submit"/&gt;
&lt;/form&gt;
&lt;form name="form2" id="form2" action=""&gt;
&lt;input type="checkbox" name="checkbox" value="checkbox1"/&gt;
&lt;input type="checkbox" name="checkbox" value="checkbox2"/&gt;
&lt;input type="checkbox" name="checkbox" value="checkbox3"/&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p><strong>UPD 20.03.2009</strong>: Бага к сожалению не пропала и в jQuery 1.3.2</p>

]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/01/06/checkbox-jquery-ie6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Console2</title>
		<link>http://mabp.kiev.ua/2009/01/05/console2/</link>
		<comments>http://mabp.kiev.ua/2009/01/05/console2/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 17:54:46 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=401</guid>
		<description><![CDATA[Все меньше и меньше остается времени у шестого IE, все больше и больше сайтов объявляют, что они перестают поддерживать дизайн и скрипты для него. Напомню что шестой IE был выпущен в 1999 году то есть 10 лет назад, а до сих пор "популярен". Уже даже сам мелкософт заявил о том что будет распространять седьмой IE [...]]]></description>
			<content:encoded><![CDATA[<p>Все меньше и меньше остается времени у шестого IE, все больше и больше сайтов объявляют, что они перестают поддерживать дизайн и скрипты для него. Напомню что шестой IE был выпущен в 1999 году то есть 10 лет назад, а до сих пор "популярен". Уже даже сам мелкософт заявил о том что будет распространять седьмой IE как стандартное обновление. Но эта тема все еще может быть актуально потому что даже в седьмом IE нет консоли, и потому что в Opera и у Safari она находиться в зачаточном состоянии по сравнению с firebug'ом. Так вот я и решил то пока еще не поздно написать вторую версию консоли. Заодно углубил свои знания и отточил практику. Теперь она работает еще быстрее и надежнее, хотя все еще не лишена кое каких глюков, например типа-массив arguments так и не покорился. И еще я не хочу чтоб вы думали что дальше я начну накладывать какие-то визуальные эффекты типа плавающих дивов вместо аллертов, я не хочу создавать второй furebug lite.</p>
<span id="more-401"></span>
<p>Итак собственно код, его стало немного больше но на много повысилась производительность. Возможно стоило собрать все методы в объект и наверное я это сделаю но не сейчас, сейчас ее надо потестить в реальных условиях.</p>

<pre><code class="html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;script&gt;
var cast = function(i) {
	// call lazy function definition
	return  (cast = !document.fileSize  // IE any version
		? function(i){return Array.prototype.slice.call(i);}
		: function(i){var l=i.length,a=[];while(l--){a[l]=i[l];}return a;}
	)(i);
},

show = function(m) {
	return (show=window.opera?window.opera.postError:window.alert)(m);
},

dump = function (x, max, sep, l) {
	l = l || 0, max = max || 3, sep = sep || "\t";
	if (l &gt; max) return "[WARNING: Too much recursion]\n";
	var i, r = '', t = typeof x, tab = '';

	if (x === null) {
		r += "(null)\n";
	} else if (t == "object") {
		for (i=0,l++;i&lt;l;i++) {tab += sep;}
		if (x &#038;& (x.length || x.length==0)) {t = 'array';}
		r += "(" + t + ") :\n";
		for (i in x)
			try { r += tab + "[" + i + "] : " + dump(x[i], max, sep, l+1);} catch(e) { return "[ERROR: " + e + "]\n"; }
	} else {
		if (t=="string"&#038;&x=="") 
			x = '(empty)';
		r += "(" + t + ") " + x + "\n";
	}
	return r;

},

myConsole = function(){
	var args = cast(arguments);
	
	if (args.length&gt;2){
		show(args.shift() +":\n"+ args.shift().replace(/(%[ds])/g, function(){
			return args.shift();
			})
		)
	}else{
		show(args.shift() +":\n"+ dump(args.shift()));
	}
};

if (window.loadFirebugConsole) { // since FireBug 1.2
	window.loadFirebugConsole();
} else if (!window.console) {
	window.console = {};
	var names = ["log", "debug", "info", "warn", "error"];
	for (var i in names){
		window.console[names[i]] = (function(name){return function(){
			myConsole.apply(null,[name].concat(cast(arguments)))
		}})(names[i]);
	}
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>И собственно мои тест-кейсы:</p>

<pre><code class="javascript">
window.onload = function(){
	console.log("string: %d %s %d", 10, "text", 10);
	console.info({});
	console.info([]);
	console.info(null);
	console.info(window);
	console.info(document);
	console.info(document.getElementsByTagName("body"));
	console.info(document.getElementsByTagName("body")[0]);
	console.info(Math);
	(function(z){try {x.y = z;}catch(e){console.info(e);}})(null);
	//(function(x,y,z){console.info(arguments)})(1,2,3); // fail

}
</code></pre>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/01/05/console2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Консоль для всех браузеров</title>
		<link>http://mabp.kiev.ua/2008/12/25/myconsole/</link>
		<comments>http://mabp.kiev.ua/2008/12/25/myconsole/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 19:43:55 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[FireFox]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=312</guid>
		<description><![CDATA[Это попытка заставить работать синтаксис консоли FireBug'a со всеми браузерами. ИМХО кроссбраузерный дебаг звучит не ок, но это именно он! А все получилось как-то само собой когда я сегодня что-то дебажил на тестовой платформе и для того чтобы тестеры не видели ошибок прикрывал вызовы консоли заглушками. if(window.console) console.log("myLog"); В общем это как-то гнило, нашел что [...]]]></description>
			<content:encoded><![CDATA[<p>Это попытка заставить работать синтаксис консоли FireBug'a со всеми браузерами. ИМХО кроссбраузерный дебаг звучит не ок, но это именно он! А все получилось как-то само собой когда я сегодня что-то дебажил на тестовой платформе и для того чтобы тестеры не видели ошибок прикрывал вызовы консоли заглушками.</p>
<span id="more-312"></span>
<pre><code class="javascript">
if(window.console)
	console.log("myLog");
</code></pre>

<p>В общем это как-то гнило, нашел что по данному поводу пишут разработчики <a href="http://mir.aculo.us/2008/12/19/little-javascript-hints-episode-1" rel="nofollow">Prototype</a> и <a href="http://docs.jquery.com/Plugins/Authoring" rel="nofollow">jQuery</a>, и даже сами разработчики FireBug'a склоняются к <a href="http://getfirebug.com/firebug/firebugx.js" rel="nofollow">заглушкам</a></p>
<p>Уж очень мне эти затычки не нравятся. И решил я выяснить что можно с этим сделать. Уточнив с какой версии у браузеров появилась консоль (и текущую версию): IE8b2 (IE7), Opera 9.50 (9.63), Safari 1.3 (3.21), FireFox 2.0.0 (3.0.5), я принялся за работу.</p>

<p>Первое что приходило на ум это что-то вроде</p>
<pre><code class="javascript">
if (!window.console) {
	window.console = {};
	window.console.log = alert;
		
}
</code></pre>

<p>Но не все так просто, FireBug славится тем что показывает содержимое любого объекта и может делать форматированный вывод. То есть во-первых можно сделать</p>
<pre><code class="javascript">
console.info({a:null});
</code></pre>
<p>и увидеть содержимое объекта в закладке DOM, а во-вторых можно сделать форматированный вывод</p>
<pre><code class="javascript">
console.info("string: %d %s %d", 10, "text", 10);
</code></pre>
<p>и увидеть строку "string: 10 text 10". В остальных же браузерах можно наблюдать только строку [object Object] и "string: %d %s %d" соответственно, кроме IE8b2, он поддерживает форматный вывод, выпендрился, блин!</p>

<p>Я решил начать с написания форматного вывода, но функция <a href="http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_sprintf/" rel="nofollow">sprintf</a> оказалась настолько громоздкой и избыточной что я решил обойтись небольшим регулярным выражением, для своих нужд, тем более что FireBug тоже не различает %d и %s ;) в отличие от IE8b2 который корректно выводит 0 вместо %d которому соответствует строка. Из этого вывод что достаточно использовать только %s.</p>

<p>Потом я решили что было бы неплохо научиться отображать содержимое объектов и массивов, для этого как нельзя хорошо подходила одна известная функция, написанная очень нелюбимым мной человеком, имя которого можете прочитать в комментарии в коде. Единственные минус этой функции в том что она не может корректно отобразить объекты типа window, на нем она уходит куда-то в глубь рекурсии и безнадежно вешает браузер. Но этот недостаток я постараюсь решить в следующей версии, если такая появиться.</p>

<p>Уже неплохо. Последним штрихом к портрету было прикручивание уровня дебага "log", "debug", "info", "warn", "error". Тут для меня было несколько откровений. Первое это то что массив arguments не такой уже и массив потому что содержит в себе еще и метод callee. Второе - что объект arguments прекрасно превращается в массив с помощью волшебной строки</p>
<pre><code class="javascript">
var args = Array.prototype.slice.call(arguments);
</code></pre>
<p>Третье - что этот метод не работает (правильно!) в IE7 и <a href="http://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=364463" rel="nofollow">IE8b2</a>, а поэтому не годиться. И наконец четвертое и последние что чертов arguments не возможно обойти циклом через <b>in</b> нужно обязательно это делать через длину</p>
<pre><code class="javascript">
for(var i in arguments) // fail
	alert(arguments[i]);
for(var i=0,j=arguments.length;i&lt;j;i++) // ok
	alert(arguments[i]);
</code></pre>

<p>Но это все не помешало мне дописать сегодня этот скрипт и выложит его на ваше растерзание</p>

<pre><code class="javascript">
myConsole = function(){
	var args = (function(a,x){for(var i=0,j=a.length;i&lt;j;i++){x.push(a[i])};return x;})(arguments,[]);
	
	if (args.length&gt;2){
		(window.opera?opera.postError:window.alert)(args.shift() +'':\\n''+ args.shift().replace(/(%[ds])/g, function(){
			return args.shift();
			})
		)
	}else{
		// автор функции dump - Дмитрий Котеров
		// http://dklab.ru/chicken/nablas/38.html
		(window.opera?opera.postError:window.alert)(args.shift() +'':\\n''+ (function dump(d,l) {
			if (l == null) l = 1;
			var s = '''';
			if (typeof(d) == "object") {
				s += typeof(d) + " {\\n";				for (var k in d) {
					for (var i=0; i&lt;l; i++){
						s += "  ";
					}
					s += k+": " + dump(d[k],l+1);
				}
				for (var i=0; i&lt;l-1; i++){
					s += "  ";
				}
				s += "}\\n"
			} else {
				s += "" + d + "\\n";
			}
			return s;
		})(args.shift()));
	}
}

if (window.loadFirebugConsole) { // since FireBug 1.2
	window.loadFirebugConsole();
} else if (!window.console) {
	window.console = {};
	var names = ["log", "debug", "info", "warn", "error"];
	for (var i in names){
		window.console[names[i]] = (function(name){return function(){
			myConsole.apply(null,(function(a,x){for(var i=0,j=a.length;i&lt;j;i++){x.push(a[i])};return x;})(arguments,[name]))
		}})(names[i]);
	}
}
</code></pre>

<p>Кому пригодиться пишите в каменты...</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2008/12/25/myconsole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

