Я бы предположил, что это будет отличаться в разных браузерах.
Одним из решений может быть его проверка, поместив скрипт непосредственно внутри открывающего тега <body>
, а затем запустив код с интервалом для добавления класса..
<body>
<script>
function add_class() {
if(document.body)
document.body.className = 'some_class';
else
setTimeout(add_class, 10); // keep trying until body is available
}
add_class();
</script>
<!-- rest of your elements-->
</body>
jQuery внутренне делает нечто подобное , чтобы справиться с конкретной ошибкой IE .
Нет гарантии, что потомокэлементы не будут загружены, поскольку, опять же, это будет зависеть от того, когда конкретная реализация сделает доступным body
.
Вот источник , где jQuery использует аналогичный подход, проверяя наличие body
в его основном обработчике jQuery.ready
и многократно вызывая jQuery.ready
через setTimeout
, если body
недоступен.
И вот пример , чтобы увидеть, может ли ваш браузер видеть элемент <body>
в скрипте вверху элемента, перед другими элементами. (откройте консоль)
Вот тот же пример без использования консоли.