18.02.2009 14:21

  1. ELV1S

    0 ↑
    0 ↓

    http://elv1s.ru/files/js/highlight/bug/ — напишите что-нибудь в правом фрейме и баг произойдёт.

    http://elv1s.ru/files/js/highlight/bug_fixed/ — тут баг исправлен.

    Ошибка была такая:

    environment is null
    [Break on this error] environment.replaceChild(container.firstChild, block.parentNode);
    highlight.js (line 330)
    

    В этом куске кода:

    // See these 4 lines? This is IE's notion of "block.innerHTML = result". Love this browser :-/
    var container = document.createElement('div');
    container.innerHTML = '<pre><code class="' + class_name + '">' + result + '</code></pre>';
    var environment = block.parentNode.parentNode;
    environment.replaceChild(container.firstChild, block.parentNode);
    

    Я её исправил. Бранч тут: lp:~nikita-vasilev/+junk/highlight

  2. М-м... Так, к сожалению, нельзя делать. Эти четыре строки там не от хорошей жизни, а дял обхода бага в IE (о чем в комментарии и написано). Баг этот до сих пор есть, судя по соседней теме в этом же форуме.

    Если я правильно понимаю, что там происходит, в какой-то момент <pre> отцепляется из документа и делаете замену в нем. По идее, если его включать в документ до замены, то бага не будет.

    P.S. Спасибо за найденную опечатку в test.html

  3. ELV1S

    0 ↑
    0 ↓

    Похоже мы не поняли друг друга. Я плохо описал, наверное.

    Я не менял поведение IE. Я просто добавил условные комментарии для IE, a для остальных браузеров оставил только "block.innerHTML = result". Это решило мою проблему и немного ускорило работу не_IE браузеров.

    (тестовая страница выше не работает в IE не из-за highlight.js :-) )

  4. Не знал о таком :-). Теперь понял :-).

  5. Из-за этого фикса теперь не проставлен class у <code> в не IE браузерах, часть стилей будет работать слегка не так

  6. Спасибо, поправил.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.