24.12.2014, 02:44
|
Новичок на форуме
|
|
Регистрация: 24.12.2014
Сообщений: 2
|
|
Определить js-файл, из которого запущен код
Вроде бы простой вопрос, но гуглеж, увы, ничего не дал... В общем, как определить, в каком из загруженных файлов находится выполняемый код?
Поясню на своей задаче: имеются файлы, скажем, 1.js и 1.css, лежат в одной папке, скажем, /subfolder/1/. Цель - подгружать из html только 1.js, чтобы он автоматом загружал 1.css (без прописывания 1.css в исходном html). Проблема в следующем: часть пути может в будущем меняться, скажем, эти файлы могут оказаться в /subfolder/subfolder2/1/. Если прописать в js загрузку css по абсолютному пути (/subfolder/1/1.css), то после перемещения работать перестанет. Соответственно, надо каким-то образом из 1.js получить его расположение и из него вычленить папку, но как это сделать?
Прописывать css-файл в html очень не хочется - речь идет о cmf, где в самых разных местах может файл подгружаться, писать везде для двух файлов крайне нежелательно...
Буду очень благодарен за дельные советы.
|
|
24.12.2014, 06:39
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от rygoravich
|
писать везде для двух файлов крайне нежелательно
|
Да ладно? Это почему? Если не радуют задержки на лишний http-запрос стиля, то объединяй все стили в один файл.
__________________
В личку только с интересными предложениями
|
|
24.12.2014, 08:57
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от rygoravich
|
Если прописать в js загрузку css по абсолютному пути
|
сами же ответили на свой вопрос. Прописывать относительный путь.
|
|
24.12.2014, 13:23
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от rygoravich
|
Вроде бы простой вопрос, но гуглеж, увы, ничего не дал... В общем, как определить, в каком из загруженных файлов находится выполняемый код?
Поясню на своей задаче: имеются файлы, скажем, 1.js и 1.css, лежат в одной папке, скажем, /subfolder/1/. Цель - подгружать из html только 1.js, чтобы он автоматом загружал 1.css (без прописывания 1.css в исходном html). Проблема в следующем: часть пути может в будущем меняться, скажем, эти файлы могут оказаться в /subfolder/subfolder2/1/. Если прописать в js загрузку css по абсолютному пути (/subfolder/1/1.css), то после перемещения работать перестанет. Соответственно, надо каким-то образом из 1.js получить его расположение и из него вычленить папку, но как это сделать?
Прописывать css-файл в html очень не хочется - речь идет о cmf, где в самых разных местах может файл подгружаться, писать везде для двух файлов крайне нежелательно...
Буду очень благодарен за дельные советы.
|
Выделить установку css в отдельную функцию, с прописанным уникальным атрибутом в теге style или link, дабы проверять нужна ли сама установка, или тег со стилем уже стоит, эту проверку делать в самой функции.
Тогда просто вызываете функцию в нужных вам скриптах
Последний раз редактировалось Deff, 24.12.2014 в 13:29.
|
|
24.12.2014, 13:42
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
RequireJS вроде умеет css подгружать. Но я считаю не нужно этого делать. Юзай RequireJS для асинхронной загрузки и управлением зависимостями между модулями.
__________________
В личку только с интересными предложениями
|
|
25.12.2014, 02:42
|
Новичок на форуме
|
|
Регистрация: 24.12.2014
Сообщений: 2
|
|
Сообщение от danik.js
|
Да ладно? Это почему? Если не радуют задержки на лишний http-запрос стиля, то объединяй все стили в один файл.
|
Напротив - я как раз хочу максимально разделить css. Дело в том, что прописанные в целевом css стили понадобятся только на некоторых страницах, причем будут востребованы только незначительной долей посетителей - зачем включать их в общий файл? Насчет задержек - они не волнуют, все равно css кэшируется браузером, а запрос из js обслуживается уж никак не быстрее, чем сгенерированный браузером на основе тега style. Цель - именно избавится от необходимости прописывать этот тег. Фишка в том, что стили в этом css применяются исключительно для элементов, сгенерированных одним конкретным js, тогда зачем прописывать в html и script и link, если можно подгрузить css-файл из скрипта?
Сообщение от BETEPAH
|
сами же ответили на свой вопрос. Прописывать относительный путь.
|
Так относительный путь будет искать файл относительно не js-файла, а текущего документа... Предположим, есть файлы (путь от корня сайта) /cmf/js/plugin1/plugin.js и /cmf/js/plugin1/plugin.css. Можно загрузить css, указав путь /cmf/js/plugin1/plugin.css, однако на других проектах файлы могут лежать не в /cmf/js/plugin1/, а, например, в /engine/js/plugin1/ или в /other/core/js/plugin1/. А если мы укажем просто имя файла (поскольку он лежит в одной папке с js), то браузер будет считать, что путь указан относительно текущего html-документа и будет пытаться грузить его как /plugin.css или, например, /news/plugin.css - в зависимости от того, на какой странице находится пользователь.
Сообщение от Deff
|
Выделить установку css в отдельную функцию, с прописанным уникальным атрибутом в теге style или link, дабы проверять нужна ли сама установка, или тег со стилем уже стоит, эту проверку делать в самой функции.
Тогда просто вызываете функцию в нужных вам скриптах
|
Цель как раз в том, чтобы не прописывать этот css в html вообще - пусть он грузится только по инициативе js...
Сообщение от danik.js
|
RequireJS вроде умеет css подгружать. Но я считаю не нужно этого делать. Юзай RequireJS для асинхронной загрузки и управлением зависимостями между модулями.
|
Ну, просто подгружать стили и я умею, вот функция:
function addCss(path) {
var el = document.createElement('link');
el.rel = 'stylesheet';
el.href = path;
el.type = 'text/css';
var head1 = document.getElementsByTagName('head');
head1[0].appendChild(el);
}
Вопрос - как вычислить параметр, с которым ее вызывать, с учетом того, что css лежит в той же папке, что и js-файл, из которого она будет вызвана?
Т.е. в файле, например, /cmf/js/plugin1/plugin.js осуществляется вызов этой функции, нужно, чтобы js знал, по какому пути он лежит, чтобы потом на его основе вычислить путь к целевому css...
Неужели совсем нет никакого способа определить, откуда запущен конкретный код?
|
|
25.12.2014, 10:17
|
Профессор
|
|
Регистрация: 21.12.2012
Сообщений: 869
|
|
Сообщение от rygoravich
|
1.js получить его расположение и из него вычленить папку, но как это сделать?
|
Никак. Хотя можешь конечно, задать класс или id этому срипту и из него же потом обратиться по этому селектору и получить src. Распарсить и вуаля.
Сообщение от rygoravich
|
Напротив - я как раз хочу максимально разделить css. Дело в том, что прописанные в целевом css стили понадобятся только на некоторых страницах,
|
использовать css препроцессоры lesscss\sass\stylus, там вся эта работа решена, отлажена и вылизана. lesscss можно подключить как библиотеку на клиенте, хотя это и не рекомендуется, но как я вижу ты не ищешь легких путей. Так что не проблема.
Тебе останется только разбивать свои стили на модули подцеплять куда надо объединять разъединять все че хошь.
Последний раз редактировалось krasovsky, 25.12.2014 в 10:22.
|
|
25.12.2014, 14:49
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от krasovsky
|
Никак
|
Ну если скрипт синхронный (блокирующий), то во время исполнения он будет последним в коллекции document.scripts (ибо блокирует дальнейший парсинг).
__________________
В личку только с интересными предложениями
|
|
25.12.2014, 14:50
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от rygoravich
|
Вопрос - как вычислить параметр
|
А разве requirejs не разруливает относительные пути? Ты же src к скриптам будежь через require() задавать, так что все элементарно.
__________________
В личку только с интересными предложениями
|
|
25.12.2014, 16:32
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
у FF вроде чтота было для этого. но у других не встречал.
на сколько вырастит css если собрать все в один файл ? может не так все критично?
Асинхронная загрузка ресурса тянет за собой свои проблемы. Вдруг не загрузиться скрипт(стиль), или будет слишком долго грузить. Хороший UI все эти ситуации должен отработать.
|
|
|
|