Quando uma folha de estilo é adicionada a document.styleSheets

Estou tentando adicionar dinamicamente uma regra de folha de estilo css usando javascript, algo como o exemplo 2aqu.

Funciona a maior parte do tempo, mas parece haver uma condição de corrida que falha algumas vezes no (pelo menos) Chrome (15.0.874 e 17.0.933). Isso acontece com pouca freqüência quando o cache está vazio (ou foi limpo).

Aqui está o que eu tenho sido capaz de reduzi-lo. Primeiro, carrego uma folha de estilo externa anexando-a a<head> e, em seguida, crio uma nova folha de estilo (onde adicionaria regras). Em seguida, imprimo o comprimento dedocument.styleSheets (imediatamente e após 1 segundo

$(function() {
    // it doesn't happen if this line is missing.
    $("head").append('<link rel="stylesheet" type="text/css"'+
                     'href="/css/normalize.css" />');

    var stylesheet = document.createElement("style");
    stylesheet.setAttribute("type", "text/css");
    document.getElementsByTagName('head')[0].appendChild(stylesheet);

    var b = $('body');
    b.append(document.styleSheets.length).append('<br/>');
    setTimeout(function() {
        b.append(document.styleSheets.length).append('<br/>');
    }, 1000);
});

(brinque com ele emhttp: //jsfiddle.net/amirshim/gAYzY/13)

Quando o cache é limpo, às vezes imprime2 então4 (jsfiddle adiciona seus próprios 2 arquivos CSS), o que significa que não adiciona nenhuma das folhas de estilo adocument.styleSheets imediatamente ... mas provavelmente aguarda o carregamento do arquivo extern

Isso é esperado?

Se for, éExemplo 2 no MDN (e muitos outros por aí) quebrado? Desde a linha 27:

var s = document.styleSheets[document.styleSheets.length - 1];

pode avaliar comdocument.styleSheets.length == 0

Observe que isso não acontece quando eu não carrego o arquivo CSS externo primeir

questionAnswers(2)

yourAnswerToTheQuestion