Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.12.2014, 02:44
Новичок на форуме
Отправить личное сообщение для rygoravich Посмотреть профиль Найти все сообщения от rygoravich
 
Регистрация: 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, где в самых разных местах может файл подгружаться, писать везде для двух файлов крайне нежелательно...

Буду очень благодарен за дельные советы.
Ответить с цитированием
  #2 (permalink)  
Старый 24.12.2014, 06:39
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от rygoravich
писать везде для двух файлов крайне нежелательно
Да ладно? Это почему? Если не радуют задержки на лишний http-запрос стиля, то объединяй все стили в один файл.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 24.12.2014, 08:57
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

Сообщение от rygoravich
Если прописать в js загрузку css по абсолютному пути
сами же ответили на свой вопрос. Прописывать относительный путь.
Ответить с цитированием
  #4 (permalink)  
Старый 24.12.2014, 13:23
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 24.12.2014, 13:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

RequireJS вроде умеет css подгружать. Но я считаю не нужно этого делать. Юзай RequireJS для асинхронной загрузки и управлением зависимостями между модулями.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2014, 02:42
Новичок на форуме
Отправить личное сообщение для rygoravich Посмотреть профиль Найти все сообщения от rygoravich
 
Регистрация: 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...

Неужели совсем нет никакого способа определить, откуда запущен конкретный код?
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2014, 10:17
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Сообщение от rygoravich
1.js получить его расположение и из него вычленить папку, но как это сделать?
Никак. Хотя можешь конечно, задать класс или id этому срипту и из него же потом обратиться по этому селектору и получить src. Распарсить и вуаля.

Сообщение от rygoravich
Напротив - я как раз хочу максимально разделить css. Дело в том, что прописанные в целевом css стили понадобятся только на некоторых страницах,
использовать css препроцессоры lesscss\sass\stylus, там вся эта работа решена, отлажена и вылизана. lesscss можно подключить как библиотеку на клиенте, хотя это и не рекомендуется, но как я вижу ты не ищешь легких путей. Так что не проблема.
Тебе останется только разбивать свои стили на модули подцеплять куда надо объединять разъединять все че хошь.

Последний раз редактировалось krasovsky, 25.12.2014 в 10:22.
Ответить с цитированием
  #8 (permalink)  
Старый 25.12.2014, 14:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от krasovsky
Никак
Ну если скрипт синхронный (блокирующий), то во время исполнения он будет последним в коллекции document.scripts (ибо блокирует дальнейший парсинг).
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 25.12.2014, 14:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от rygoravich
Вопрос - как вычислить параметр
А разве requirejs не разруливает относительные пути? Ты же src к скриптам будежь через require() задавать, так что все элементарно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 25.12.2014, 16:32
Аватар для vflash
Профессор
Отправить личное сообщение для vflash Посмотреть профиль Найти все сообщения от vflash
 
Регистрация: 09.07.2007
Сообщений: 304

у FF вроде чтота было для этого. но у других не встречал.
на сколько вырастит css если собрать все в один файл ? может не так все критично?
Асинхронная загрузка ресурса тянет за собой свои проблемы. Вдруг не загрузиться скрипт(стиль), или будет слишком долго грузить. Хороший UI все эти ситуации должен отработать.
__________________
лучшая rss читалка zzreader.com
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключить js файл к js файлу Ozerich Общие вопросы Javascript 8 11.08.2018 21:05
Вызов функции и передача переменных в подключаемый JS файл (jQuery) Max Alekseyev Events/DOM/Window 1 20.10.2014 08:15
Код калькулятора на JS. помогите с ошибкой! kirill.psl Общие вопросы Javascript 9 26.08.2010 11:38
Большой JS файл. Кэш IE6. deadpsh Общие вопросы Javascript 1 26.11.2008 23:38
Как защитить файл js от скачивания с сервера? slon Общие вопросы Javascript 2 02.07.2008 01:14