<?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>JSToolbox - все о JavaScript &#187; Отладка</title>
	<atom:link href="http://www.jstoolbox.com/category/otladka/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jstoolbox.com</link>
	<description>Блог о программировании вообще и о JavaScript в частности, уроки, статьи, заметки, база знаний.</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:33:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Удобная JavaScript консоль</title>
		<link>http://www.jstoolbox.com/2008/08/16/udobnaya-javascript-konsol/</link>
		<comments>http://www.jstoolbox.com/2008/08/16/udobnaya-javascript-konsol/#comments</comments>
		<pubDate>Sat, 16 Aug 2008 19:55:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Отладка]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/08/16/udobnaya-javascript-konsol/</guid>
		<description><![CDATA[Хотели бы вы иметь возможность работать с JavaScript консолью в любом веб броузере? Прекрасное решение, реализующее эту возможность, создал Антон Теряев. Его консоль представляет собой динамически генерируемое перетаскиваемое окно, в которое можно вводить и выполнять программы JavaScript.




Чтобы выполнить что-либо в этой консоли, нужно ввести в главную панель свою программу и нажать кнопку &#34;run script&#34;. Скрипт [...]]]></description>
			<content:encoded><![CDATA[<p>Хотели бы вы иметь возможность работать с JavaScript консолью в любом веб броузере? Прекрасное решение, реализующее эту возможность, создал <a href="http://blogs.sun.com/ahot/entry/javascript_handy_js_console" title="JavaScript консоль">Антон Теряев</a>. Его консоль представляет собой динамически генерируемое перетаскиваемое окно, в которое можно вводить и выполнять программы JavaScript.</p>
<div class="entry_picture" style="width:400px">
<img src='http://www.jstoolbox.com/wp-content/uploads/2008/08/jsconsole.png' alt='JavaScript консоль' />
</div>
<p><span id="more-209"></span></p>
<p>Чтобы выполнить что-либо в этой консоли, нужно ввести в главную панель свою программу и нажать кнопку <strong>&quot;run script&quot;</strong>. Скрипт для создания такой консоли достаточно прост:</p>
<pre class="prettyprint">
//mouse down on dragged DIV element
function startdrag(t, e) {
	if (e.preventDefault) e.preventDefault(); //line for IE compatibility
	e.cancelBubble = true;
	window.document.onmousemoveOld = window.document.onmousemove;
	window.document.onmouseupOld = window.document.onmouseup;
	window.document.onmousemove=dodrag;
	window.document.onmouseup=stopdrag;
	window.document.draged = t;
	t.dragX = e.clientX;
	t.dragY = e.clientY;
	return false;
}
//move the DIV
function dodrag(e) {

	if (!e) e = event; //line for IE compatibility
	t = window.document.draged;
	t.style.left = (t.offsetLeft + e.clientX - t.dragX)+"px";
	t.style.top = (t.offsetTop + e.clientY - t.dragY)+"px";

	t.dragX = e.clientX;
	t.dragY = e.clientY;
	return false;
}
//restore event-handlers
function stopdrag() {
   window.document.onmousemove=window.document.onmousemoveOld;
   window.document.onmouseup=window.document.onmouseupOld;
}
function WRITE(s) {
	document.getElementById('ScriptOutArea').innerHTML+= s.toString().replace("\n", "&lt;BR>");
}
function runScipt() {
	new Function("{\n"+document.getElementById('ScriptArea').value+"\n}")();
	document.getElementById('ScriptOutArea').scrollTop = document.getElementById('ScriptOutArea').scrollHeight;
}
function clearOut() {
	document.getElementById('ScriptOutArea').innerHTML = "";
}
function onerrorscript(err) {
	document.getElementById('ScriptOutArea').innerHTML += "&lt;FONT color=red>"+err.replace("\n", "&lt;BR>")+"&lt;/FONT>&lt;BR>";
	document.getElementById('ScriptOutArea').scrollTop = document.getElementById('ScriptOutArea').scrollHeight;
}

function initJavaScriptConsole() {
	if (document.getElementById('javascriptconsolediv') != null) {
		document.body.removeChild(document.getElementById('javascriptconsolediv'));
		return;
	}
	s = "";
	s+="&lt;TABLE cellpadding=1 cellspacing=0 width=400>";
	s+="&lt;TR>&lt;TD>&lt;DIV style='background:#bbccdd;color:black;border:1px solid black;font:11px courier new' onmousedown=startdrag(getElementById('javascriptconsolediv'),event)>javascript console, Anton Teryaev, 2008&lt;/DIV>&lt;/TD>&lt;/TR>";
	s+="&lt;TR>&lt;TD>&lt;DIV style='border:1px solid black;padding:0px'>&lt;TEXTAREA style='padding:0px;width:100%;height:200px;border:0px solid black' id=ScriptArea>";
	s+="i = document.getElementsByTagName('BR');\n";
	s+="WRITE('There are '+i.length+' BR elements here\\n');";
	s+="&lt;/TEXTAREA>&lt;/DIV>&lt;/TD>&lt;/TR>";
	s+="&lt;TR>&lt;TD>&lt;INPUT TYPE=BUTTON VALUE='run script' onclick=runScipt() style='width:100px;background:#eeeeee;color:black;border:1px solid black;font:11px courier new'> &lt;INPUT TYPE=BUTTON VALUE='clear output' onclick=clearOut() style='width:100px;background:#eeeeee;color:black;border:1px solid black;font:11px courier new'>&lt;/TD>&lt;/TR>";
	s+="&lt;TR>&lt;TD>&lt;DIV style='background:#eeeeee;overflow:auto;height:100px;color:gray;border:1px solid black;font:11px courier new' id='ScriptOutArea'>";
	s+="&lt;i>Output area, use WRITE(string) function.&lt;/i>&lt;BR>";
	s+="&lt;/DIV>&lt;/TD>&lt;/TR>";
	s+="&lt;/TABLE>";

	var sd = document.createElement("DIV");
	sd.style.position="absolute";
	sd.style.background="white";
	sd.style.border="1px solid black";
	sd.style.font="11px courier new";
	sd.style.top = (document.documentElement.scrollTop+document.documentElement.clientHeight/2-180)+"px";
	sd.style.left = (document.documentElement.scrollLeft+document.documentElement.clientWidth/2-200)+"px";
	sd.id = "javascriptconsolediv";
	sd.innerHTML=s;

	document.body.appendChild(sd);

	window.onerror = onerrorscript;
	window.onscroll = onwinscroll;
}
function onwinscroll() {
	md = document.getElementById('javascriptconsolediv');
	if (md.offsetTop > document.documentElement.scrollTop+document.documentElement.clientHeight-350) md.style.top = (document.documentElement.scrollTop+document.documentElement.clientHeight-350) + "px";
	if (md.offsetTop &lt; document.documentElement.scrollTop) md.style.top = document.documentElement.scrollTop + "px";
	if (md.offsetLeft &lt; document.documentElement.scrollLeft) md.style.left = document.documentElement.scrollLeft + "px";
}
</pre>
<p>Ну и неменее прост этот скрипт в использовании. Для того чтобы включить или выключить консоль, нужно вызвать одну единственную функцию:</p>
<pre class="prettyprint">
initJavaScriptConsole();
</pre>
<p>Увидеть скрипт в действии можно на <a href="http://blogs.sun.com/ahot/entry/javascript_handy_js_console">блоге автора</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/08/16/udobnaya-javascript-konsol/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Как просмотреть стэк вызова функций в JavaScript</title>
		<link>http://www.jstoolbox.com/2008/08/14/kak-prosmotret-stek-vyzova-funkcij-v-javascript/</link>
		<comments>http://www.jstoolbox.com/2008/08/14/kak-prosmotret-stek-vyzova-funkcij-v-javascript/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 20:15:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Отладка]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/08/14/kak-prosmotret-stek-vyzova-funkcij-v-javascript/</guid>
		<description><![CDATA[В Firebug &#8211; популярном плагине для Firefox, существует фукнция console.trace(), которая позволяет просмотреть стэк фукнций, т.е. просмотреть последовательность вызова функций до определенной точки. Но если вы его не используете, либо, что более вероятно, вам нужно просмотреть стэк вызова функций на других браузерах, не поддерживающих Firebug, то вам возможно пригодится следующая функция, созданная Эриком Венделином (Eric [...]]]></description>
			<content:encoded><![CDATA[<p>В <a href="http://getfirebug.com/" title="Firebug - отладчик для JavaScript">Firebug</a> &#8211; популярном плагине для Firefox, существует фукнция <strong>console.trace()</strong>, которая позволяет просмотреть стэк фукнций, т.е. просмотреть последовательность вызова функций до определенной точки. Но если вы его не используете, либо, что более вероятно, вам нужно просмотреть стэк вызова функций на других браузерах, не поддерживающих Firebug, то вам возможно пригодится следующая функция, созданная <a href="http://eriwen.com/javascript/js-stack-trace/" title="Блог Эрика Венделина">Эриком Венделином (Eric Wendelin)</a>:</p>
<p><span id="more-208"></span></p>
<pre class="prettyprint">
function printStackTrace() {
    var callstack = [];
    var isCallstackPopulated = false;
    try {
        i.dont.exist+=0; //does not exist - that's the point
    } catch(e) {
        if (e.stack) { //Firefox
            var lines = e.stack.split("\n");
            for (var i = 0, len = lines.length; i < len; i++) {
                if ( lines[i].match( /^\s*[A-Za-z0-9\-_\$]+\(/ ) ) {
                    callstack.push(lines[i]);
                }
            }
            //Remove call to printStackTrace()
            callstack.shift();
            isCallstackPopulated = true;
        }
        else if (window.opera &#038;&#038; e.message) { //Opera
            var lines = e.message.split("\n");
            for (var i = 0, len = lines.length; i &lt; len; i++) {
                if ( lines[i].match( /^\s*[A-Za-z0-9\-_\$]+\(/ ) ) {
                    var entry = lines[i];
                    //Append next line also since it has the file info
                    if (lines[i+1]) {
                        entry += " at " + lines[i+1];
                        i++;
                    }
                    callstack.push(entry);
                }
            }
            //Remove call to printStackTrace()
            callstack.shift();
            isCallstackPopulated = true;
        }
    }
    if (!isCallstackPopulated) { //IE and Safari
        var currentFunction = arguments.callee.caller;
        while (currentFunction) {
            var fn = currentFunction.toString();
            //If we can't get the function name set to "anonymous"
            var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf("(")) || "anonymous";
            callstack.push(fname);
            currentFunction = currentFunction.caller;
        }
    }
    output(callstack);
}

function output(arr) {
    //Optput however you want
    alert(arr.join("\n\n"));
}
</pre>
<p>Как и <strong>console.trace()</strong> эта функция показывает стэк вызова функций. Работает она в IE, Firefox, Opera и Safari. Пример использования:</p>
<pre class="prettyprint">
function foo() {
    var blah;
    bar("blah");
}

function bar(blah) {
    var stuff;
    thing();
}

function thing() {
    if (true) { //your error condition here
        printStackTrace();
    }
}

foo();
</pre>
<p>Вероятно более простым способом просмотра стэка было бы использование <a href="http://getfirebug.com/lite.html" title="Firebug Lite">Firebug Lite</a>, который может работать в IE, Opera и Safari, но все же, ситуации бывают разные.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/08/14/kak-prosmotret-stek-vyzova-funkcij-v-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CompanionJS &#8211; JavaScript дебаггер для IE</title>
		<link>http://www.jstoolbox.com/2008/07/03/companionjs-javascript-debagger-dlya-ie/</link>
		<comments>http://www.jstoolbox.com/2008/07/03/companionjs-javascript-debagger-dlya-ie/#comments</comments>
		<pubDate>Thu, 03 Jul 2008 20:18:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Отладка]]></category>
		<category><![CDATA[Плагины]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[дебаггер]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/07/03/companionjs-javascript-debagger-dlya-ie/</guid>
		<description><![CDATA[Может для кого-то это и не новость, но я об этом плагине узнал только сейчас на Стартаперы.ru. Судя по описанию, CompanionJS предоставляет браузеру Internet Explorer функциональность для работы с JS как у Firebug &#8211; лог ошибок, JavaScript консоль и т.д.



Мне не совсем понравилась кнопочка &#8220;Buy&#8221; в меню на домашней странице, однако как я позже выяснил, [...]]]></description>
			<content:encoded><![CDATA[<p>Может для кого-то это и не новость, но я об этом плагине узнал только сейчас на <a href="http://startupers.ru/webworker/companion_js_debuger/" title="Стартаперы.ru">Стартаперы.ru</a>. Судя по описанию, <a href="http://www.my-debugbar.com/wiki/CompanionJS/HomePage" title="CompanionJS - дебаггер для JavaScript">CompanionJS</a> предоставляет браузеру Internet Explorer функциональность для работы с JS как у Firebug &#8211; лог ошибок, JavaScript консоль и т.д.</p>
<div class="entry_picture" style="width:470px">
<img src='http://www.jstoolbox.com/wp-content/uploads/2008/07/cjs.png' alt='cjs.png' />
</div>
<p>Мне не совсем понравилась кнопочка &#8220;Buy&#8221; в меню на домашней странице, однако как я позже выяснил, использование программы в личных целях абсолютно бесплатно. Еще один не совсем положительный факт &#8211; программа зависит от <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2f465be0-94fd-4569-b3c4-dffdf19ccd99&#038;displaylang=en" title="Microsoft Script Debugger">Microsoft Script Debugger</a>. Я не готов утверждать на 100%, но по-моему Microsoft Script Debugger установить можно только на лицензионный Windows, так что это может не всем подойти.</p>
<p><a href="http://www.my-debugbar.com/wiki/CompanionJS/HomePage" title="Домашняя страница CompanionJS" class="external">домашняя страница проекта</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/07/03/companionjs-javascript-debagger-dlya-ie/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Отладка скриптов в Internet Explorer</title>
		<link>http://www.jstoolbox.com/2008/03/21/otladka-skriptov-v-internet-explorer/</link>
		<comments>http://www.jstoolbox.com/2008/03/21/otladka-skriptov-v-internet-explorer/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 21:26:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Отладка]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/03/21/otladka-skriptov-v-internet-explorer/</guid>
		<description><![CDATA[Вы наверно удивитесь, но производить отладку скриптов JavaScript можно при помощи Microsoft Office. Смешно, не правда ли? Тем не менее, в комплект поставки Microsoft Office 2003/XP входит Microsoft Script Editor &#8211; прекрасный дебаггер, внешне напоминающий Visual Studio. Он способен производить пошаговый проход, просмотр переменных, редактирование файлов и многое другое, и все это доступно для Internet [...]]]></description>
			<content:encoded><![CDATA[<p>Вы наверно удивитесь, но производить отладку скриптов JavaScript можно при помощи Microsoft Office. Смешно, не правда ли? Тем не менее, в комплект поставки Microsoft Office 2003/XP входит Microsoft Script Editor &#8211; прекрасный дебаггер, внешне напоминающий Visual Studio. Он способен производить пошаговый проход, просмотр переменных, редактирование файлов и многое другое, и все это доступно для Internet Explorer 6/7 (и скорее всего для MS Office тоже <img src='http://www.jstoolbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ).</p>
<p><span id="more-79"></span></p>
<p>Итак, рассмотрим установку и настройку Microsoft Script Editor. Если у вас не установлен Microsoft Office, установите его. Если установлен, то зайдете в &#8220;Панель управления&#8221; -&gt; &#8220;Установка и удаление программ&#8221; -&gt; &#8220;Microsoft Office&#8221;, и жмите &#8220;Изменить&#8221;. Затем выберите &#8220;Добавить или удалить компоненты&#8221;, жмем &#8220;Далее&#8221;. На появившейся странице выбора компонентов нужно поставить галочку возле &#8220;Расширенная настройка приложений&#8221;, и опять жмем кнопку &#8220;Далее&#8221;. Следующей страницей будет панель выбора устанавливаемых компонентов, где нужно включить компонент &#8220;Веб-отладка&#8221; в разделе &#8220;Средства Office&#8221; -&gt; &#8220;Редактор для языка HTML&#8221; -&gt; &#8220;Веб-сценарии&#8221; (см. рисунок). Точно такая же процедура выбора компонентов будет и при новой установке Office:</p>
<p><img src='http://www.jstoolbox.com/wp-content/uploads/2008/03/debug_install1.jpg' alt='Выбор компонента Веб-отладка из Microsoft Office' /><br/></p>
<p>Далее нажимаем &#8220;Обновить&#8221; (&#8221;Установить&#8221; если это новая установка). На этом установка Microsoft Script Editor закончена, переходим к настройке Internet Explorer. Откройте его, и в меню &#8220;Сервис&#8221; выберите &#8220;Свойства обозревателя&#8221;. В диалоге настройки откройте вкладку &#8220;Дополнительно&#8221; и снимите две галочки с пунктов &#8220;Отключить отладку сценариев (Internet Explorer)&#8221; и &#8220;Отключить отладку сценариев (другие)&#8221;:</p>
<p><img src='http://www.jstoolbox.com/wp-content/uploads/2008/03/debug_install.jpg' alt='Настройка Internet Explorer' /><br/></p>
<p>На этом установка завершена. Теперь, каждый раз при обнаружении ошибки на странице, вместо стандартного сообщения об ошибке будет появляться диалог, предлагающий начать отладку.</p>
<p><img src='http://www.jstoolbox.com/wp-content/uploads/2008/03/debug_session1.jpg' alt='Диалог, предлагающий начать отладку' /></p>
<p>Нажимаем &#8220;Да&#8221;, и в следующем диалоге выбора дебаггера выбираем &#8220;New instance of Microsoft Script Editor&#8221; и жмем &#8220;Yes&#8221;. Далее появится отладчик с открытой в нем страницей в том месте, где произошла ошибка.</p>
<p><a style="float:left;margin:8px" href='http://www.jstoolbox.com/wp-content/uploads/2008/03/debug_session3.jpg' title='Окно приложения в месте, где произошла ошибка'><img src='http://www.jstoolbox.com/wp-content/uploads/2008/03/debug_session3.thumbnail.jpg' alt='Окно приложения в месте, где произошла ошибка' /></a>Для пошагового прохода, используйте команды Step Into, Step Out, Step Over из меню Debug. Чтобы добавить точки останова, просто щелкните мышкой в поле слева возле нужной строки либо откройте диалог New Breakpoint (Alt+F9), в котором можно указать файл, строку или функция для останова. Для удобного просмотра переменных откройте панель Watch из меню Debug -&gt; Windows (или Ctrl+Alt+W). Также можно просматривать переменные из диалога Debug -&gt; Quick Watch (Ctrl+Alt+W). В любом случае отслеживаемые переменные необходимо вводить вручную.</p>
<p>Microsoft Script Editor можно также открывать вручную из меню &#8220;Вид&#8221;-&gt;&#8221;Отладчик сценариев&#8221;-&gt;&#8221;-&gt;&#8221;Открыть&#8221; Internet Explorer-а, либо просто запустив приложение из C:\Program Files\Microsoft Office\OFFICE11\MSE7.EXE. Далее, открываем нужный нам скрипт либо HTML файл, содержащий нужный нам скрипт, устанавливаем точки останова и запускаем отладку в меню Debug -&gt; Start (F5).</p>
<p>Теперь, я думаю от отладки при помощи <strong>alert()</strong> можно отказаться. На мой взгляд, FireBug гораздо лучше приспособлен для отладки, однако IE порой выбрасывает такие ошибки, что только диву даешься. Так что, данная утилита может принести огромную пользу.</p>
<p>К сожаления Microsoft Script Editor мало документирован, и большинство информации в интернете доступно на английском. Единственное более-менее полное описание на русском языке я нашел <a href="http://web-mastering.net/software/26.shtml">здесь</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/03/21/otladka-skriptov-v-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Проблемы с созданием таблиц в Internet Explorer</title>
		<link>http://www.jstoolbox.com/2008/02/26/problemy-s-sozdaniem-tablic-v-internet-explorer/</link>
		<comments>http://www.jstoolbox.com/2008/02/26/problemy-s-sozdaniem-tablic-v-internet-explorer/#comments</comments>
		<pubDate>Mon, 25 Feb 2008 23:01:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Отладка]]></category>
		<category><![CDATA[IE innerHTML баги]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/02/26/problemy-s-sozdaniem-tablic-v-internet-explorer/</guid>
		<description><![CDATA[Сегодня я хочу обратить ваше внимание на один довольно интересный (если с ним не сталкиваться   ) баг, с которым мне довелось повстречаться. Мне нужно было создать таблицу в которую я добавлял строки при помощи innerHTML. Код для добавления строк был приблизительно следующим.

function insertData( name, value ){
	var table = document.getElementById('dataTable');
	table.innerHTML += '&#60;tr>&#60;td>'+name+'&#60;/td>&#60;td>'+value+'&#60;/td>&#60;/tr>';
}

Все работало отлично [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня я хочу обратить ваше внимание на один довольно интересный (если с ним не сталкиваться <img src='http://www.jstoolbox.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) баг, с которым мне довелось повстречаться. Мне нужно было создать таблицу в которую я добавлял строки при помощи innerHTML. Код для добавления строк был приблизительно следующим.</p>
<pre class="prettyprint">
function insertData( name, value ){
	var table = document.getElementById('dataTable');
	table.innerHTML += '&lt;tr>&lt;td>'+name+'&lt;/td>&lt;td>'+value+'&lt;/td>&lt;/tr>';
}
</pre>
<p>Все работало отлично везде, кроме IE. После долгих поисков я все-таки обнаружил причину. Дело в том, что innerHTML нельзя использовать для добавления содержимого в тэги table, thead, tfoot, tr, которые в Internet Explorer доступны только для чтения (больше об этом можно узнать <a href="http://support.microsoft.com/kb/239832" rel="nofollow">здесь</a>). Поэтому эти элементы нужно создавать при помощи стандартных методов DOM. Однако и здесь хитро подложены грабли. Оказывается, что при создании таблицы в IE, элемент tbody является обязательным, т.е. структура таблицы должна иметь следующий вид table > tbody > tr > td. Например, следующий код будет работать везде, кроме Internet Explorer:</p>
<pre class="prettyprint">
function createTable(){
	var body = document.getElementsByTagName('body')[0];
	var table = document.createElement('table');
	table.setAttribute('border','2');
	var tr = document.createElement('tr');
	var td = document.createElement('td');
	td.setAttribute('id','myCell');
	td.appendChild(document.createTextNode('Это таблица'));

	tr.appendChild(td);
	table.appendChild(tr);
	body.appendChild(table);
}
</pre>
<p>В IE таблица будет создана и добавлена в документ (это видно в IE Developer Toolbar), но отображаться она не будет! Теперь, если добавить в таблицу элемент tbody, то проблемы исчезнут:</p>
<pre class="prettyprint">
function createTable(){
	var body = document.getElementsByTagName('body')[0];
	var table = document.createElement('table');
	table.setAttribute('border','2');
	var tbody = document.createElement('tbody');
	var tr = document.createElement('tr');
	var td = document.createElement('td');
	td.setAttribute('id','myCell');
	td.appendChild(document.createTextNode('Это таблица'));

	tr.appendChild(td);
	tbody.appendChild(tr);
	table.appendChild(tbody);
	body.appendChild(table);
}
</pre>
<p>Не правда ли, жесткий баг? И уж очень он смахивает на <a href="http://www.positioniseverything.net/explorer/peekaboo.html">peekaboo баг</a>, при котором элементы в IE точно так же не отображаются на странице.</p>
<p>И напоследок, интересная ссылка на сайт с описанием четырех багов innerHTML &#8211; <a href="http://webbugtrack.blogspot.com/search/label/innerHTML" rel="nofollow">Web bug track</a>.<br/>До встречи!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/02/26/problemy-s-sozdaniem-tablic-v-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
