azproduction / lmd

LMD - JavaScript Module-Assembler for building better web applications :warning: Project is no longer supported :warning:
http://azproduction.ru/lmd/
MIT License
449 stars 27 forks source link

загрузка и выгрузка CSS #117

Closed entcor closed 11 years ago

entcor commented 11 years ago

Добрый день !

версия LMD 1.10.5-4 проверка под firefox (более не тестил)

sb.require.css = function (moduleName, callback) {
    ...

   if((sheets[j].ownerNode || sheets[j].owningElement).id == id &&
   (sheets[j].cssRules || sheets[j].rules).length) {
//#JSCOVERAGE_IF 0
          return onload(1);
//#JSCOVERAGE_ENDIF
   }

(sheets[j].ownerNode || sheets[j].owningElement).id и id имеют разные типы (один строку, другой число)

соответственно CSS выгружается через 3 секунды.

строка require выглядит так:

        require.css("../common/css/estyle.css",function (statys){

        })

спасибо!

azproduction commented 11 years ago

Привет!

Не совсем понял в чем роблема. Нода со стилями будет удалена из DOM если stylesheet не будет загружен за 3 секунды. Иначе нода будет передана в качестве аргумента callback и из нее будет удален только id. Удалена в этом случае она не будет.

Типы .id == id никак не влияют. Они сравниваются по == (Abstract Equality Comparison Algorithm)

var id = +new Date; // Это id css
id == id.toString(); // true

Проверь путь до стиля. Если путь - Оk, то пришли изолированный пример кода (лучше в Gist). Будем разбираться!

entcor commented 11 years ago

В том то и дело, что он (стиль) сначала грузиться и применяется потом (через 3 сек) удаляется и все пропадает Пример соберу

azproduction commented 11 years ago

Пересобрал пример https://github.com/azproduction/lmd/tree/master/examples/plugins/css - там все ок... Жду твой код!

entcor commented 11 years ago

Понятия не имею как лучше тут файлы публиковать даю ссылку

https://docs.google.com/file/d/0B-ZKZRQ2AMTZSmw5TXV2cHpqMFU/edit?usp=sharing

azproduction commented 11 years ago

FF19.

HTML:

<html>
<head>
<link href="../common/css/estyle.css" rel="stylesheet">
<meta charset="utf-8">
<script src="../common/js/jquery.js">
<script src="release.lmd.js">
</head>
<body> </body>
</html>
entcor commented 11 years ago

а у меня через 3 секунды фон опять белый

entcor commented 11 years ago

попробовал под хромом тоже стиль удаляется

azproduction commented 11 years ago

Так, давай думать в сторону кэшей и прочих серверных фокусов.

Я запускаю через http-server - npm install http-server -g Поробуй через него.

entcor commented 11 years ago

Да - оба браузера оставили стиль ... все осталось красным

azproduction commented 11 years ago

Кадай заголовки, которые отдает твой сервер на .css

http-server:

HTTP/1.1 304 Not Modified
X-Powered-By: union 0.1.8
Server: ecstatic-0.1.6
Date: Sun, 10 Mar 2013 11:54:35 GMT
Etag: "118839-35-Sun Mar 10 2013 21:21:24 GMT+0600 (YEKT)"
Last-Modified: Sun, 10 Mar 2013 15:21:24 GMT
Cache-Control: max-age=3600
Connection: keep-alive
HTTP/1.1 200 OK
X-Powered-By: union 0.1.8
Server: ecstatic-0.1.6
Date: Sun, 10 Mar 2013 11:55:34 GMT
Etag: "118839-35-Sun Mar 10 2013 21:21:24 GMT+0600 (YEKT)"
Last-Modified: Sun, 10 Mar 2013 15:21:24 GMT
Cache-Control: max-age=3600
Content-Type: text/css
Connection: keep-alive
Transfer-Encoding: chunked
entcor commented 11 years ago

Cache-Control max-age=3600 Connection keep-alive Date Sun, 10 Mar 2013 11:55:36 GMT Etag "0-35-Sun Mar 10 2013 21:21:24 GMT+1000 (Якутское время (зима))" Last-Modified Sun, 10 Mar 2013 11:21:24 GMT Server ecstatic-0.1.7

Заголовки запросапоказать исходный код Accept text/css,/;q=0.1 Accept-Encoding gzip, deflate Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Cache-Control max-age=0 Connection keep-alive Cookie connect.sid=s%3Aj%2BBwwjp1T7EzLWUGY289xj%2Be.Siv3CONaqj1mDGR7NlB000RL80kJO8L%2FGzS64bKcV5c Host 127.0.0.1:8080 If-Modified-Since Sun, 10 Mar 2013 11:21:24 GMT If-None-Match "0-35-Sun Mar 10 2013 21:21:24 GMT+1000 (Якутское время (зима))" Referer http://127.0.0.1:8080/project/index.html User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0

entcor commented 11 years ago

ненене я первый раз делал локально ! я немного не то отправил ! это просто открытие с локального диска без сервера

azproduction commented 11 years ago

О, прикольно. Нашел :) Если открыть по file:// стиль убивается через 3 секунды oO.

entcor commented 11 years ago

вот вот я так и пробовал

azproduction commented 11 years ago

Проблема в file:// При попытке проверки количество стилей (sheets[j].cssRules || sheets[j].rules).length код вываливается с Exception. Если это возможно поробуй работать по http:// я пока думаю, что с этим можно сделать.

entcor commented 11 years ago

хорошо - спасибо !

azproduction commented 11 years ago

Зафиксил. Тк запуск по file:// это минорный кейс добавил специальный флаг file_protocol -- see https://github.com/azproduction/lmd/blob/master/examples/plugins/css/.lmd/index.lmd.json#L14

Обновляйся lmd@1.10.5-5. Спасибо за баг!

entcor commented 11 years ago

А у меня не поменялось

https://docs.google.com/file/d/0B-ZKZRQ2AMTZWDRGSnVLT3N5cFU/edit?usp=sharing

возможно все же (sheets[j].ownerNode || sheets[j].owningElement).id и id имеют разные типы (один строку, другой число)

это я писал в начале - сейчас не проверял

azproduction commented 11 years ago

Необходимо добавить строчку в конфиг и пересобрать.

После этого в файле release.lmd.js должна появиться строчка

if (e != 1 && (e.code === 15 || sheets[j].cssRules === null)) {return onload(1);}

Тогда все заработает.

entcor commented 11 years ago

Прошу прощения! это я lmd не в глобальную область поставил (версия старая осталась)

Спасибо!

dmitrykuznetsovdev commented 11 years ago

Ура ! Молодцы !)))