Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

"компилятор" JavaScript.

4
02 декабря 2011 года
mike
3.7K / / 01.10.2002
Скажите, какие есть средства по созданию продакшн версии JavaScript приложений? Есть сервис. JavaScript, Ajax, диалоги, JSON и т.п. Есть некоторое количество модулей .js, которые необходимо подгружать на некотором количестве HTML страниц. Также есть некоторое количество таблиц .css.

Все это подгружается как синхронно, так и асинхронно. Вопрос. Не хочу так как у битрикса:

Код:
<script type="text/javascript" src="/js/functions.js"></script>
    <style type="text/css" media="all">
    /*<![CDATA[*/
        @import "/css/index.css";
    /*]]>*/
    </style>
    <!--[if !IE6]>
    <style type="text/css" media="all">
    /*<![CDATA[*/
        @import url(/css/ie6.css);
    /*]]>*/
    </style>
    <![endif]-->
    <!--[if !IE7]>
    <style type="text/css">
    /*<![CDATA[*/
        @import url(/css/ie7.css);
    /*]]>*/
    </style>
    <![endif]-->
    <link href="/bitrix/js/main/core/css/core.css?1318489165" type="text/css" rel="stylesheet" />
<link href="/bitrix/templates/alliance/components/bitrix/news.list/alliance_special_home/style.css?1232007055" type="text/css" rel="stylesheet" />
<link href="/bitrix/templates/alliance/components/bitrix/news.list/alliance_news_home/style.css?1190810720" type="text/css" rel="stylesheet" />
<link href="/bitrix/templates/alliance/styles.css?1226067730" type="text/css" rel="stylesheet" />
<link href="/bitrix/templates/alliance/template_styles.css?1226067730" type="text/css" rel="stylesheet" />
    <script type="text/javascript" src="/bitrix/js/main/core/core.js?1318489152"></script>
<script type="text/javascript">BX.message({'LANGUAGE_ID':'ru','FORMAT_DATE':'DD.MM.YYYY','FORMAT_DATETIME':'DD.MM.YYYY HH:MI:SS','COOKIE_PREFIX':'BITRIX_SM','bitrix_sessid':'9eaba9540fdfd93c8dee07d890fde832','JS_CORE_LOADING':'Загрузка...','JS_CORE_WINDOW_CLOSE':'Закрыть','JS_CORE_WINDOW_EXPAND':'Развернуть','JS_CORE_WINDOW_NARROW':'Свернуть в окно','JS_CORE_WINDOW_SAVE':'Сохранить','JS_CORE_WINDOW_CANCEL':'Отменить','JS_CORE_H':'ч','JS_CORE_M':'м','JS_CORE_S':'с'})</script>
<script type="text/javascript" src="/bitrix/js/main/core/core_ajax.js?1318489152"></script>
<script type="text/javascript" src="/bitrix/js/main/session.js?1318488673"></script>


Хочу как на codenet.ru:

 
Код:
<link type="text/css" rel="stylesheet" href="http://i.codenet.ru/min.css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js "></script>


Один или два js файла в котором все собрано и минифицировано и один css файл. Но в процессе разработки хочу чтобы это было раскидано по модулям с соблюлением структуры и логики. Вопрос не столько в минификации, сколько в сборке.

Наверняка ведь есть такие решения.
274
02 декабря 2011 года
Lone Wolf
1.3K / / 26.11.2006
CSS - http://developer.yahoo.com/yui/compressor/
ЖС- http://code.google.com/closure/compiler/ вроде этот у меня..
4
02 декабря 2011 года
mike
3.7K / / 01.10.2002
Ну я пользуюсь yui. Но это только минификация. А хочется еще и объединять автоматом.
49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
Цитата:
ЖС- http://code.google.com/closure/compiler/ вроде этот у меня..



Да - это реально ВЕЩЬ! Сам пользую, самое удобное именно ф-ция АПИ.. Т.е. к примеру на Фидбаке у меня есть пхп код, который выпускает новую версию каждый раз.


Сам хтмл файл выглядит так:

[HTML]/^ PRODUCTION ^/
<LINK href="{:TEMPL_PATH}style/compiled.css" type="text/css" rel="stylesheet">
/^ PRODUCTION ^/


/^ DEBUG ^/
<!-- COMBINED CSS -->
<LINK href="{:TEMPL_PATH}style/style.css" type="text/css" rel="stylesheet">
<LINK href="{:TEMPL_PATH}style/Home.css" type="text/css" rel="stylesheet">
<LINK href="{:TEMPL_PATH}style/Wall.css" type="text/css" rel="stylesheet">
<LINK href="{:TEMPL_PATH}style/User.css" type="text/css" rel="stylesheet">
<LINK href="{:TEMPL_PATH}style/Pic.css" type="text/css" rel="stylesheet">
<!-- END COMBINED CSS -->
/^ DEBUG ^/

<script>
document.SDFullPath = '{THE_HOST}CalyptoEngine/Extensions/SDTable/';
document.SDImgPath = document.SDFullPath + "lib/Table/i/";
</script>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"></script>

/^ DEBUG ^/
<!-- SCRIPTS -->
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.mousewheel.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.em.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.animate-enhanced.min.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jdmenu/jquery.clickmenu.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/js/jquery.ui.selectmenu.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery-ui-timepicker-addon.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/js/autoresize.jquery.min.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/js/jquery.timeago.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.json-2.3.min.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.flot.min.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.corner.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/jquery.scrollTo-min.js"></script>


<script type="text/javascript" src="{:TEMPL_PATH}scripts/Ajax.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/ControlBar/ControlBar.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}scripts/Window/Handlers/CookieHandler.js" ></script>

<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/sdt_global.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/Shirm/SShirm.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/Shirm/Helper.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/PicCom/PicCom.js?{rand}"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/Wall/Wall.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}JPlugin/User/User.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}main.js"></script>

<!-- END SCRIPTS -->

<!-- SDTABLE -->
<script type="text/javascript"> document.write(unescape("%3Cscript src='{:HTTP_PATH}index.php?__system_name={system_name}&comp=SDTable::js' type='text/javascript'%3E%3C/script%3E"));</script>
/^ DEBUG ^/

/^ PRODUCTION ^/
<script type="text/javascript" src="{:TEMPL_PATH}compiled.min.js"></script>
/^ PRODUCTION ^/


<!-- NO COMPILE -->
<script type="text/javascript" src="{:TEMPL_PATH}jquery/tree/jquery.jstree.js"></script>
<script type="text/javascript" src="{:TEMPL_PATH}jquery/colorpicker/js/colorpicker.js"></script>
[/HTML]

Что происходит после запуска скрипта я думаю уже догадаться не сложно.

274
02 декабря 2011 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: mike
Ну я пользуюсь yui. Но это только минификация. А хочется еще и объединять автоматом.



хм.. ну уменя php-шный таск для минификации и конкетинации. конкетинирую уже в пхп. так как задача разовая, не вижу в ней проблемы

49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
Компилятор:
Код:
<?php
    define("CM_PATH", "/var/www/feedback/v/production/");

   $dir = '/var/www/feedback/v/production/Templates/default/';


   $top_file=file_get_contents($dir.'index.html');
   
    $A = explode('<!-- SCRIPTS -->', $top_file);
    $B = explode('<!-- END SCRIPTS -->', $A[1]);
   
    $CA = explode('<!-- COMBINED CSS -->', $top_file);
    $CB = explode('<!-- END COMBINED CSS -->', $CA[1]);
   
    $the_big_file = '';
    $the_big_css_file = '';
   
    $scripts = explode("\n", $B[0]);
    $csss = explode("\n", $CB[0]);
    foreach ($scripts as &$s) {
         $s = trim($s);
         if(!$s) continue;
         print $s;
         preg_match('/\{:TEMPL_PATH\}([^"]*)\.js/', $s, $m);
         
         print $dir.$m[1].".js<BR>";
         
         $the_big_file .= file_get_contents($dir.$m[1].".js");
    }
   
   
    foreach ($csss as &$s) {
         $s = trim($s);
         if(!$s) continue;
         print $s;
         preg_match('/\{:TEMPL_PATH\}([^"]*)\.css/', $s, $m);
         
         print $dir.$m[1].".css<BR>";
         
         $the_big_css_file .= file_get_contents($dir.$m[1].".css");
         
    }
   
    $the_big_css_file = preg_replace("/\/\*([^\*]*)\*\//", "", $the_big_css_file);
    $the_big_css_file = preg_replace("/\n|\r|\t/", "", $the_big_css_file);
   
    file_put_contents('/var/www/feedback/v/production/Templates/default/style/compiled.css', $the_big_css_file);

    $dir = CM_PATH.'CalyptoEngine/Extensions/SDTable/';
       
    $top_file=file_get_contents($dir.'lib/Table/SDTable.js');
   
    preg_match_all('/lib\/([^"]*)\.js"/', $top_file, $m);
   
    $a = explode('/** --- **/',$top_file,2);
    $the_big_file .= $a[1];

    foreach ($m[0] as &$v) {
        $v = preg_replace('/\"$/', '',$v);
        print $v."<BR>";
        $the_big_file .= file_get_contents($dir.$v);
    }
   
   
   //print $the_big_file;
   print $dir;
   file_put_contents('/var/www/feedback/v/production/Templates/default/compiled6.js', $the_big_file);
   
    $params = array('http' => array(
        'method' => 'POST',
        'content' => 'code_url='.urlencode('http://www.feedbackme.org/v/production/Templates/default/compiled6.js').'&compilation_level=SIMPLE_OPTIMIZATIONS&output_format=text&output_info=compiled_code'
      ));
      $ctx = stream_context_create($params);
     
      $fp = @fopen('http://closure-compiler.appspot.com/compile', 'rb', false, $ctx);
      if (!$fp) { throw new Exception("Problem with $php_errormsg"); }
      $response = @stream_get_contents($fp);
       
    file_put_contents('/var/www/feedback/v/production/Templates/default/compiled.min.js', $response);

?>
4
02 декабря 2011 года
mike
3.7K / / 01.10.2002
Цитата: Lone Wolf
хм.. ну уменя php-шный таск для минификации и конкетинации. конкетинирую уже в пхп. так как задача разовая, не вижу в ней проблемы



Это решение применимо только до определенного уровня сложности. Когда количество модулей идет на сотни, так уже за всем не уследить.

345
02 декабря 2011 года
vadim_k
312 / / 01.08.2006
Скажите пожалуйста
а подключать CSS файлы и JavaSript по мере подключеня модулей
а не в разделе head это очень плохо
Давно вопрос мучает...
271
02 декабря 2011 года
MrXaK
721 / / 31.12.2002
Тут такая проблема - можно либо каждый раз при каждом обращении собирать динамически, например, просто пройтись по директории с js-ами, загрузить все, объединить, минимизировать... Hа на больших проектах будет долго. Поэтому подход Lone Wolf-а гораздо лучше. Есть у нас те же скрипты в папке, нашим серверным скриптом, который запускается ручками или как-то автоматизированно после заливки, не обязательно php-шным, объединяется в один статичный файл, который и отдаётся потом как статик) как раз проблемы в количестве модулей не вижу)
271
02 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: vadim_k
Скажите пожалуйста
а подключать CSS файлы и JavaSript по мере подключеня модулей
а не в разделе head это очень плохо
Давно вопрос мучает...



CSS - плохо, [2]
JS - можно

на CSS есть хаки, в виде добавления тэга <link> к <head> посредством JS (через document.createElement или $('<link />').attr({....}).appendTo($("head")); или document.createStyleSheet(); (последнее только для IE))

49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
Цитата:
Тут такая проблема - можно либо каждый раз при каждом обращении собирать динамически, например, просто пройтись по директории с js-ами, загрузить все, объединить, минимизировать...



В смысле каждый раз? Компилируется один раз перед релизом каждой версии.. Опять же с примера фидбака. Есть папочка "production" - в ней я кодю, эксперементирую. Специальный субдомен туда ведет...
Запускаю компилятор - и он выплевывает папочку 1.6, с уже сжатыми ЖаваСкриптом и ЦСС. Ее проверяю. .Если все ок, в файлике меняю номер версии и вуаля, все довольны...

Но правда у меня ОДИН, шапочный html файл на все модули. В модульных ХТМЛах нету ни подгрузок Цсс ни Жаваскриптов.

ПС... У меня кстати количество модулей идет за сотни... Не на фидбаке, на другом проекте по ERP системе.. И очень, очень, очень удобно... А главное - просто =)

345
02 декабря 2011 года
vadim_k
312 / / 01.08.2006
так выходит ты лишнее загружаешь ведь какие
"модульных ХТМЛах"
будут использованы ты не знаешь
49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
Да - это компромисс на который приходится идти..

В моем случае (с чертовски динамическими системами) он выгоден. на ERP к примеру один сжатый js файл весит 800 кб.. Но как факт - я на долбаном 3G, где-то в полюшке, запускаю систему.. Она загружается (целостно) за 2-3 секунды, а потом летает как белка под редбулом, и я спокойно создаю фактуры, клиентов, ордера. И мои клиенты уже в шоке насколько круто это у меня работает =)

Едит:
Цитата:
так выходит ты лишнее загружаешь ведь какие



На самом деле это ни так... Использоваться будет ВСЕ, рано или поздно.. Не значит, что сразу. Но файл уже будет скачан и закеширован, по сути до следующего релиза (у меня жестко с кешом прописано... не обновлять! ибо нет смысла). И получается, что пкоа я не выпущу новую версию программы, пользователь будет пользоваться двумя, однажды скачанными файлами...

271
02 декабря 2011 года
MrXaK
721 / / 31.12.2002
А если пользователю в зависимости от авторизации на сайте надо разный js отдавать? )) У меня просто тоже такая проблема есть, я каждый раз к серверному скрипту обращаюсь, а скрипт юзает memcached для снижения нагрузки)) я пока не придумал как такую модель можно полностью на статик переделать
49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
Цитата:
А если пользователю в зависимости от авторизации на сайте надо разный js отдавать?



:facepalm: Если честно, то первая реакция.. "Ну нафига так заморачиваться..."

Но если такое требует базис проекта, значит надо готовить разные сжатые js =)

49K
02 декабря 2011 года
vorobej
129 / / 17.11.2011
+ Ради бога, не забывайте, что как у JS, так и у CSS есть функции "@import"

Ни что вам не мешает создать 2-3 файла как вам угодно, туда напихать куче импортов (это чтобы ХТМЛ парсер не пришлось использовать)... А потом при релизе, просто импорты пересжимать

Т.е. в драфт версии к примеру css выглядит:

@import('module1.css')
@import('module2.css')
@import('module3.css')

А в продакшине - после компилятора уже с компилированным кодом всех импортов...

Мне просто не надо так заморачиваться, поскольу все ХТМЛЫ у меня через парсер движка проходят
4
02 декабря 2011 года
mike
3.7K / / 01.10.2002
Цитата: vorobej
+ Ради бога, не забывайте, что как у JS, так и у CSS есть функции "@import"

@import('module1.css')
@import('module2.css')
@import('module3.css')

Мне просто не надо так заморачиваться, поскольу все ХТМЛЫ у меня через парсер движка проходят



Хороший вариант. Только вот условий не поддерживает.

12
03 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK

на CSS есть хаки, в виде добавления тэга <link> к <head> посредством JS (через document.createElement или $('<link />').attr({....}).appendTo($("head")); или document.createStyleSheet(); (последнее только для IE))


Не надо... не хаки это. И уж тем более не CSS. Это DOM, вполне себе нормальный и даже стандартизированный механизм.

271
03 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
Не надо... не хаки это. И уж тем более не CSS. Это DOM, вполне себе нормальный и даже стандартизированный механизм.



В стандартах w3c об этом ничего нет, так что это хак. В официальной доке есть только это, что позволяет добавлять стили в ходе выполнения, но не подгружать их из других файлов. Поправьте, если я ошибаюсь, но других официальных доков я не нашёл. Да и по логике, в доке на стили есть строка "If two or more LINK elements specify a preferred style sheet, the first one takes precedence." то есть, как я понимаю, если подключить во время выполнения новый файл, определяющий те же стили, то он не должен ничего изменить.

12
03 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK
В стандартах w3c об этом ничего нет, так что это хак. В официальной доке есть только это, что позволяет добавлять стили в ходе выполнения, но не подгружать их из других файлов. Поправьте, если я ошибаюсь, но других официальных доков я не нашёл. Да и по логике, в доке на стили есть строка "If two or more LINK elements specify a preferred style sheet, the first one takes precedence." то есть, как я понимаю, если подключить во время выполнения новый файл, определяющий те же стили, то он не должен ничего изменить.


Повторюсь еще раз. Использование createElement или каких либо других свойств/методов из DOM это не хак. Это нормальный стандартный механизм реализуемый через имплементацию DOM в JavaScript-е. Не хак это, не хак.

49K
03 декабря 2011 года
vorobej
129 / / 17.11.2011
Хм, странный какой-то спор. Все равно что один кричит - это мороженное вкусное!, а другой - это мороженное сытное! И еще спорить кто прав...

По идее так это - "hack" первоначальной структуры CSS сайта средствами DOMа. И ничего в этом плохого нетус =) В одном моем проекте так на ура работает (когда темплатес ДОМ элемента задается опцией, и в зависимости от нее, подгружаются разные стили)
12
03 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: vorobej
Хм, странный какой-то спор. Все равно что один кричит - это мороженное вкусное!, а другой - это мороженное сытное! И еще спорить кто прав...


Ничуть. Тут нет спора, я просто указываю на заблуждение с целью его опровергнуть. Форум - публичное место. Коднет достаточно старый ресурс что бы в поисковой выдаче быть высоко. И мне не хочется, что бы менее искушенные люди почитав тему решили "о, это не нужно использовать, это хак". В интернетах и так с инфой проблема, так что не нужно это усугублять. Право слово не стоит.

49K
03 декабря 2011 года
vorobej
129 / / 17.11.2011
Цитата:
И мне не хочется, что бы менее искушенные люди почитав тему решили "о, это не нужно использовать, это хак"



С этим и правда не поспоришь. Все зависит от понимания слова "хак"

Если к этому относится так : "о, это не нужно использовать, это хак", то CSS через DOM, это не ХАК! Пользуйтесь на здоровье! =)

Если к "хаку" относится более правильно, а именно как "к внедренному коду, который изменяет! (не хорошо или плохо, а просто изменяет) общую структуру программы" - то CSS через DOM, это самый настоящий хак. И опять же - Пользуйтесь на здоровье! +)

12
03 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: vorobej
С этим и правда не поспоришь. Все зависит от понимания слова "хак"


А вот это у тебя уже пошло мороженное.

49K
03 декабря 2011 года
vorobej
129 / / 17.11.2011
Не, я как раз к тому, что :

А) "Хак" и DOM - это две разные вещи и друг другу не противоречат. Т.е. говорить что "Это НЕ хак - это ДОМ" или "Это не ДОМ - это Хак" в корне не верно. Ибо это два индигриента одного салата.

Б) Что донести людям правильное понимание слово "хак" полезнее чем, избегать этого слова потому что: "о, это не нужно использовать, это хак". Ибо "ХАК" - не есть зло, а мощный инструмент в руках праведного и неправедного кодера.
287
03 декабря 2011 года
Shiizoo
958 / / 14.03.2004
Найн. В вебе хак это объективно плохо, но как любое средство, он имеет свою область применения.
49K
04 декабря 2011 года
vorobej
129 / / 17.11.2011
Цитата:
Найн. В вебе хак это объективно плохо, но как любое средство, он имеет свою область применения.



Хмм... Тогда видимо придется уточнить - в рунете это объективно плохо. В Швеции же, Хак - объективно рассматривается как инструмент: не хорошо и не плохо.

12
06 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: vorobej

А) "Хак" и DOM - это две разные вещи и друг другу не противоречат. Т.е. говорить что "Это НЕ хак - это ДОМ" или "Это не ДОМ - это Хак" в корне не верно. Ибо это два индигриента одного салата.


Ай-яй-яй... Передергивать, вырывать из контекста... как нехорошо то. Прямо троллинг.

http://forum.codenet.ru/threads/69195-компилятор-JavaScript.?p=362449&viewfull=1#post362449

271
06 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
Ай-яй-яй... Передергивать, вырывать из контекста... как нехорошо то. Прямо троллинг.

http://forum.codenet.ru/threads/69195-компилятор-JavaScript.?p=362449&viewfull=1#post362449



не, ну я действительно считаю, что это хак)) не зря же к head через innerHTML нельзя обращаться, не зря document.createStyleSheet только в ие есть, не зря стили пишутся только в head) и заметьте, у того же jQuery высокоуровневый интерфейс .load есть, .get есть, .getScript есть, а .getCSS нету и работа с CSS только динамическим добавлением к существующим на момент загрузки стилям, а не подгрузка новых. ок, может быть это и не хак в полном смысле, но так делать не стоит)

12
06 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK
не, ну я действительно считаю, что это хак)) не зря же к head через innerHTML нельзя обращаться, не зря document.createStyleSheet только в ие есть, не зря стили пишутся только в head) и заметьте, у того же jQuery высокоуровневый интерфейс .load есть, .get есть, .getScript есть, а .getCSS нету и работа с CSS только динамическим добавлением к существующим на момент загрузки стилям, а не подгрузка новых. ок, может быть это и не хак в полном смысле, но так делать не стоит)


document.createStyleSheet хак потому как работает только в IE. Но при этом не хак CSS. Потому что есть в CSS просто не существует. А первоначально упомянутый createElement хаком считаться не может. Он часть спецухи. Поэтому подгрузка стилей, других элементов их модификация через DOM при следовании спецухи не хаки.

271
06 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
document.createStyleSheet хак потому как работает только в IE. Но при этом не хак CSS. Потому что есть в CSS просто не существует. А первоначально упомянутый createElement хаком считаться не может. Он часть спецухи. Поэтому подгрузка стилей, других элементов их модификация через DOM при следовании спецухи не хаки.



но скрипт я могу подгрузить, написав, например $('body').html("<script src="somescript.js"></script>");, а CSS - нет, обращаться к $('head').html() нельзя. Получается, что не все DOM-методы работают для подгрузки CSS. А те что работают - хак)))

12
06 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK
но скрипт я могу подгрузить, написав, например $('body').html("<script src="somescript.js"></script>");, а CSS - нет, обращаться к $('head').html() нельзя. Получается, что не все DOM-методы работают для подгрузки CSS. А те что работают - хак)))


Ох уж эти фрейморвки... JQuery поди да? Писать на нативном JavaScript порой бывает сильно конструктивнее.

Рулить стилями страницы без хаков возможно: http://www.w3.org/TR/DOM-Level-2-Style/css.html . На фроте не кодю этак уже пару лет, но даже тогда это было вполне возможно. Ну а для разных недобраузеров да, можно заюзать хак. Но это не хаки CSS, это просто работа с нестандартным DOM API не более.

271
06 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
Ох уж эти фрейморвки... JQuery поди да? Писать на нативном JavaScript порой бывает сильно конструктивнее.

Рулить стилями страницы без хаков возможно: http://www.w3.org/TR/DOM-Level-2-Style/css.html . На фроте не кодю этак уже пару лет, но даже тогда это было вполне возможно. Ну а для разных недобраузеров да, можно заюзать хак. Но это не хаки CSS, это просто работа с нестандартным DOM API не более.



ну в нативном элемента document.head нету, в отличие от document.body. но смысл, что написать и на нативном document.documentElement.children[0].innerHTML нельзя, хотя кое-где сработает))
А в доке, что вы дали (кстати спасибо за неё) написано: "There is no way to associate the new CSSStyleSheet with a document in DOM Level 2." да и у Interface DocumentStyle styleSheets of type StyleSheetList, readonly.

12
06 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK
ну в нативном элемента document.head нету, в отличие от document.body. но смысл, что написать и на нативном document.documentElement.children[0].innerHTML нельзя, хотя кое-где сработает))
А в доке, что вы дали (кстати спасибо за неё) написано: "There is no way to associate the new CSSStyleSheet with a document in DOM Level 2." да и у Interface DocumentStyle styleSheets of type StyleSheetList, readonly.


Конструкции вида document.body это "полуофициальный" DOM Level 0.

В доке не только это написано. Нам шашечки или ехать? Цель добавления нового CSS файла это добавление новых правил на текущую страницу, так? Ну вот DOM Level 2 зафичить новый CSS файл не даст, а вот рулить правилами даст. Собственно что и требуется обычно.

271
06 декабря 2011 года
MrXaK
721 / / 31.12.2002
Цитата: alekciy
Ну вот DOM Level 2 зафичить новый CSS файл не даст, а вот рулить правилами даст.



так именно это я и пытаюсь сказать. Вообще я изначально отвечал на этот вопрос))

раз пост последний, добавлю. Ссылка на msdn, где прямо написано "you cannot use innerHTML to inject into the HEAD or STYLE element directly." В отличие от <script>

12
06 декабря 2011 года
alekciy
3.0K / / 13.12.2005
Цитата: MrXaK
так именно это я и пытаюсь сказать. Вообще я изначально отвечал на этот вопрос))


Я в курсе ;) Но я обращаю внимание на формулировку. "на CSS есть хаки". Согласись, что даже для случая с IE, где это действительно хак, это не CSS.

271
06 декабря 2011 года
MrXaK
721 / / 31.12.2002
Хм, возможно я написал коряво, и там должен был быть предлог "для". "На" не имелось в виду, что хак написан на css, а имелось в виду область применимости хака. И css должен стоять в винительном падеже (на что?), а не в предложном (в чём?)... Это как словосочетания "написано на паскале" и "бафни на ману")))
76K
07 декабря 2011 года
exoticious
7 / / 17.11.2011
good evening friend nice work :)
76K
14 декабря 2011 года
exoticious
7 / / 17.11.2011
yep you're right guys first of all i thought i can make some footage then i can sell it on istock or another stock share maybe it would be better as you said it takes long time.. thanks guys..
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог