02.06.2009, 15:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
B~Vladi,
это все понятно. Использование insertBefore вместо appendChild, если падает ИЕ -- классическое решение. Вопрос не в этом. А ответ намного более удивительный, чем вы себе представляете
|
|
02.06.2009, 16:02
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Kolyaj
|
Вопрос не в этом.
|
Я знаю в чём вопрос и по этому поводу уже написал. Это для тех, кому всё же нужен вариант обхода(кроме использования ваших любимых jq, prototype ect).
Сообщение от Kolyaj
|
А ответ намного более удивительный, чем вы себе представляете
|
ну?!
|
|
02.06.2009, 16:04
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Kolyaj, ты шайтан млин, тебе п книшшки писать а не на форумах сидеть с кучей ответов в голове и ждать пока какой-нить прогер попросит помощи.
|
|
02.06.2009, 16:05
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Это кста относицца ко многим месным...
|
|
02.06.2009, 16:05
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от B~Vladi
|
Это для тех, кому всё же нужен вариант обхода
|
Проще в body скрипт переложить.
Сообщение от B~Vladi
|
кроме использования ваших любимых jq, prototype ect
|
Моих? Я с Prototype писал давным давно, с jQuery никогда, с ExtJS пишу только сложные интерфейсы, которые, будь моя воля, писал бы без него Все остальное на своих скриптах.
Сообщение от B~Vladi
|
ну?!
|
Завтра
|
|
02.06.2009, 16:06
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Kolyaj
|
Проще в body скрипт переложить.
|
Ну путей много... не будем тормозить на ентом...
Сообщение от Kolyaj
|
Завтра
|
Ну йа грю же шайтан
|
|
03.06.2009, 12:11
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Собственно, объяснение.
http://kolyaj.ya.ru/replies.xml?item_no=1911 + http://kolyaj.ya.ru/replies.xml?item...ly-kolyaj-1900
Цитата:
|
Очень неприятная ошибка в ИЕ6. Проявляет себя тем, что выскакивает окошко с текстом "Не удалось открыть узел http://test.ru/ Операция будет прервана" после чего показывает "Невозможно загрузить страницу."
Условия воспроизведения:
Пусть у нас есть тег T (это может быть head, body и вообще любой тег) и в любом из его детей есть скрипт, который добавляет методом appendChild детей в T. Вот этот appendChild и вызывает проблему. Если скрипт находится непосредственно в T, то ошибки не будет.
Решение проблемы:
Добавлять детей методом insertBefore перед любым существующим элементом или переместить скрипт в другое место.
Особый случай:
Может случиться так, что ваш скрипт лежит в head и элементы добавляет тоже в head. Казалось бы ничего страшного произойти не должно, но если у вас есть тег base, то страшное случится. Т.е. в результате окажется, что скрипт лежит не в head, а в base, и ошибка воспроизведется.
|
Цитата:
|
В результате у тега body parentNode равен тегу base. Т.е. если идти по парентам вверх от какого-нибудь элемента, то получим что-то вроде div -> body -> base -> head -> html.
При этом если от html рекурсивно идти вниз по коллекции childNodes, то получится, что элемент body со всем своим поддеревом одновременно является ребенком тега base и тега html.
Вот это код можно обернуть в букмарклет и позапускать в ИЕ6 на любой странице с тегом base, например, на сохраненках яндекса.
function getChildrens(e, level, maxLevel) {
var childrens = [];
for (var i = 0; i < e.childNodes.length; i++)
if (e.childNodes[i].nodeType == 1)
childrens.push(e.childNodes[i]);
var response = [];
var tab = '';
for (var i = 0; i < level; i++)
tab += '\t';
for (var i = 0; i < childrens.length; i++) {
var item = tab + childrens[i].tagName + (document.body == childrens[i] ? '*' : '');
var childs = '';
if (level < maxLevel) {
childs = getChildrens(childrens[i], level + 1, maxLevel);
}
if (childs)
item += '\n' + childs;
response.push(item);
}
return response.join('\n');
}
alert(getChildrens(document.documentElement, 0, 3));
|
Цитата:
|
Кстати, чтобы тег base не ломал dom-дерево в ИЕ, его надо закрывать в html-стиле.
<base href="http://www.yandex.ru/"></base>
|
|
|
03.06.2009, 12:32
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Мда... никогда не писал и не буду его писать в своём html
|
|
03.06.2009, 17:50
|
|
Профессор
|
|
Регистрация: 03.04.2009
Сообщений: 1,263
|
|
Цитата:
|
var head=document.documentElement.firstChild
|
А что именно будет этим firstChild? Часом не текстовая нода?
|
|
03.06.2009, 17:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Ну этот я код у B~Vladi спер, в моей задаче он не принципиален.
|
|
|
|