Comments 30
а выражения одноразовые?
зачем вообще два файла, если все в один можно положить?
зачем вообще два файла, если все в один можно положить?
Для того, чтобы JS не лез в DOM, пока он ещё не готов, есть атрибут defer. Работает вроде только в IE, но и CSS Expressions тоже только в IE до 8-й версии будут работать.
Для остальных браузеров существуют своие собственные методы, сигнализирующие о завершении формирования дерева DOM, для fx есть с 3.1 метод calc(). Разве не лучше использовать кроссбраузерную обёртку, чем обёртку только для ie?
Для остальных браузеров существуют своие собственные методы, сигнализирующие о завершении формирования дерева DOM, для fx есть с 3.1 метод calc(). Разве не лучше использовать кроссбраузерную обёртку, чем обёртку только для ie?
defer, говорит браузеру, что скрипт не нужно запускать здесь и сейчас, а можно заниматься своими делами и не ждать пока скрипт загрузится, блокируя все остальное. Готовность DOM тут ни при чем.
Тем более, что файл стилей не есть файл скрипта.
Тем более, что файл стилей не есть файл скрипта.
The defer attribute specifies that the execution of a script should be deferred (delayed) until after the page has been loaded.
Defer говорит браузеру о том, что не нужно запускать яваскрипт до тех пор, пока не загрузится html-документ. Для ie, насколько я помню это подразумевает «пока не загрузится и не распарсится html-документ и не построится DOM-дерево».
Всё, дошло, сначала неправильно понял саму цель создания обёртки )
Тогда да, Вы в принципе правы.
Ещё весьма полезны на практике кешируемые экспрешены, например, при ресайзе окна, если размеры блоков указаны в процентах.
HTML 4.0
Возможно, конечно, что и DOM уже построен при запуске. Тут ничего не могу сказать, не проверял.
When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no «document.write» in javascript) and thus, the user agent can continue parsing and rendering.
Возможно, конечно, что и DOM уже построен при запуске. Тут ничего не могу сказать, не проверял.
По поводу кросс-браузерной обертки — CSS-Expressions работают только в IE. Так что IE Only
Отнюдь. В fx есть calc(), который даёт почти ту же функциональность.
Для других браузеров есть возможность сделать отложенное выполнение js до момента окончания формирования DOM-дерева. Это, конечно, не экспрешены, но с поправкой на то, что я сначала подумал, что Вы добиваетесь в первую очередь отложенной загрузки, это было ещё актуально.
Для других браузеров есть возможность сделать отложенное выполнение js до момента окончания формирования DOM-дерева. Это, конечно, не экспрешены, но с поправкой на то, что я сначала подумал, что Вы добиваетесь в первую очередь отложенной загрузки, это было ещё актуально.
экспрешн внутри экспрешена. омг
не за это ли хаяли IE6?
Вам надо было придумать это раньше, до того как IE6 решил, что зажился на этом свете. IE 7 по большей части expression не нужны, а IE 8 в expression и вовсе не поддерживает.
Не сказал бы, что решение красивое
О, клёво, спасибо :)
Есть над чем помедитировать.
Есть над чем помедитировать.
я такое делаю так:
в качестве свойств на которое навешивается expression — использую проприентарные scrollbar-свойства, а проверку загрузки DOM делаю обращаясь к блоку что всегда находится внизу html — #bottom.
в js я к своему стыду ещё плохо разбираюсь, поэтому как вы проверяете готовность DOM неразобрался(
могли бы пояснить?
span.block-before,span.block-after {zoom: 1; font-size: 1px; position: relative} html*div.text-block { scrollbar-face-color: expression(document.getElementById("bottom") ? ( this.runtimeStyle.scrollbarFaceColor = "#fff", insertAdjacentHTML('afterBegin','<span class="block-before"></span>'), insertAdjacentHTML('beforeEnd', '<span class="block-after"></span>')) : '#fff' ) }
в качестве свойств на которое навешивается expression — использую проприентарные scrollbar-свойства, а проверку загрузки DOM делаю обращаясь к блоку что всегда находится внизу html — #bottom.
в js я к своему стыду ещё плохо разбираюсь, поэтому как вы проверяете готовность DOM неразобрался(
могли бы пояснить?
Попыткой прокрутки document.documentElement.doScroll(«left»);
Разумеется на 0 пикселей.
Если DOM не готов, вызывает ошибку. Соответственно, если не вызывает, можно действовать.
Разумеется на 0 пикселей.
Если DOM не готов, вызывает ошибку. Соответственно, если не вызывает, можно действовать.
DOMready = setInterval(function(){ try{ document.documentElement.doScroll("left"); clearInterval(DOMready); DOMready = true; for (var f in fn){ fn[f](); } }catch(e){} }, 10)
спасибо!
а что делает
а что делает
for (var f in fn){ fn[f](); }
В fn у меня хранятся функции (действия), запущенные из экспрешна, и ждут своего часа.
Когда DOM готов, т.е. ошибки нет и блок try выполняется дальше попытки прокрутки, запускаются все эти функции.
При вызове «действия» проверяется готов ли DOM. Если готов функция запускается сразу, а если нет — складируется в fn.
Когда DOM готов, т.е. ошибки нет и блок try выполняется дальше попытки прокрутки, запускаются все эти функции.
При вызове «действия» проверяется готов ли DOM. Если готов функция запускается сразу, а если нет — складируется в fn.
if (DOMready === true){ action(el, add); } else { fn.push(function(){ action(el, add); }); }
Sign up to leave a comment.
CSS-Expressions on DOMReady (CSS+JS в одном файле)