Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.06.2009, 15:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

B~Vladi,
это все понятно. Использование insertBefore вместо appendChild, если падает ИЕ -- классическое решение. Вопрос не в этом. А ответ намного более удивительный, чем вы себе представляете
Ответить с цитированием
  #22 (permalink)  
Старый 02.06.2009, 16:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Kolyaj
Вопрос не в этом.
Я знаю в чём вопрос и по этому поводу уже написал. Это для тех, кому всё же нужен вариант обхода(кроме использования ваших любимых jq, prototype ect).
Сообщение от Kolyaj
А ответ намного более удивительный, чем вы себе представляете
ну?!
Ответить с цитированием
  #23 (permalink)  
Старый 02.06.2009, 16:04
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Kolyaj, ты шайтан млин, тебе п книшшки писать а не на форумах сидеть с кучей ответов в голове и ждать пока какой-нить прогер попросит помощи.
Ответить с цитированием
  #24 (permalink)  
Старый 02.06.2009, 16:05
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Это кста относицца ко многим месным...
Ответить с цитированием
  #25 (permalink)  
Старый 02.06.2009, 16:05
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от B~Vladi
Это для тех, кому всё же нужен вариант обхода
Проще в body скрипт переложить.

Сообщение от B~Vladi
кроме использования ваших любимых jq, prototype ect
Моих? Я с Prototype писал давным давно, с jQuery никогда, с ExtJS пишу только сложные интерфейсы, которые, будь моя воля, писал бы без него Все остальное на своих скриптах.

Сообщение от B~Vladi
ну?!
Завтра
Ответить с цитированием
  #26 (permalink)  
Старый 02.06.2009, 16:06
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Kolyaj
Проще в body скрипт переложить.
Ну путей много... не будем тормозить на ентом...
Сообщение от Kolyaj
Завтра
Ну йа грю же шайтан
Ответить с цитированием
  #27 (permalink)  
Старый 03.06.2009, 12:11
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 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>
Ответить с цитированием
  #28 (permalink)  
Старый 03.06.2009, 12:32
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Мда... никогда не писал и не буду его писать в своём html
Ответить с цитированием
  #29 (permalink)  
Старый 03.06.2009, 17:50
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Цитата:
var head=document.documentElement.firstChild
А что именно будет этим firstChild? Часом не текстовая нода?
Ответить с цитированием
  #30 (permalink)  
Старый 03.06.2009, 17:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Ну этот я код у B~Vladi спер, в моей задаче он не принципиален.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск