Есть ли способ изменить «текущий рабочий каталог» содержимого Тег <script>? Структура каталогов на моем сервере выглядит так:

├── css
│   ├── flexigrid.css
│   └── images
│       ├── bg.gif
│       ├── ...
│       └── wbg.gif
└── js
    └── flexigrid.js

3 directories, 21 files

Так что, если бы в моем <head> был только такой тег, я был бы в порядке:

<link rel='stylesheet' type='text/css' href='/css/flexigrid.css' />

Но я загружаю содержимое файла как текст и вставляю его в заголовок с помощью javascript:

// 'css' is a string containing the text of flexigrid.css
var css_el = document.createElement('style');
css_el.type = 'text/css';
css_el.innerHTML = css;
document.getElementsByTagName('head')[0].appendChild(css_el);

В результате в таблице стилей появляются такие строки:

background: #eee url(images/line.gif) repeat-y -1px top;

Загружать URL-адреса типа /images/line.gif вместо /css/images/line.gif. Здесь способ создать тег <style> так, чтобы вызовы url() начинались в Каталог /css вместо базового каталога без необходимости поиск и замена в javascript ?

4
aaronstacy 29 Июн 2011 в 22:07
Ах, я пропустил последнее предложение. Есть ли причина, по которой вы используете JavaScript для вставки style, но не хотите использовать JavaScript для правильного форматирования / представления вставленных style?
 – 
David Thomas
29 Июн 2011 в 22:30
Я загружаю таблицу стилей с javascript, потому что хочу создавать автономные плагины, которые используют js / html / css, но состоят только из одного вызова типа require (). Я работаю над большой базой кода, где я не знаю о каждом файле css, и если я просто использую '.replace ()' в содержимом css, я могу легко ввести ошибки (например, если файл содержит пути к обоим файлам). images / and images / some-other-plugin / images /).
 – 
aaronstacy
29 Июн 2011 в 22:43

2 ответа

Лучший ответ

Эта способность и кеширование CSS - две основные вещи, которые вы теряете, когда включаете CSS в строку.

Единственное, что вы можете сделать для крошечных изображений, таких как пуля или линия, - это преобразовать их в data: URL и не беспокойтесь об относительных URL.

3
brianary 29 Июн 2011 в 22:35
1
Я думал, что файл все равно будет кеширован, хотя я загружаю содержимое как текст вместо CSS. Например, если я несколько раз нажму кнопку «Обновить», в журналах сервера будет указано, что браузер не запрашивает повторно указанный файл css.
 – 
aaronstacy
29 Июн 2011 в 22:52
1
Какой файл CSS? Файл HTML, содержащий текст CSS, кэшируется, но если вы используете один и тот же текст CSS в нескольких файлах HTML, сервер должен отправлять его в каждом файле HTML, поскольку браузер (или прокси-сервер, или сервер) не может кэшировать часть страницы.
 – 
brianary
6 Июл 2011 в 01:51
Я загружаю файл CSS как текст, а затем вставляю его как внутренний HTML-код тега