2011-06-29 52 views
3

有沒有辦法改變 <script>標籤內容的「當前工作目錄」?我的服務器上的目錄結構如下:內容的相對路徑<style>標籤

├── 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; 

加載網址如/images/line.gif而不是/css/images/line.gif。有 一種方法來創建<style>標籤使得url()電話在 /css目錄,而不是根目錄開始,而不必 搜索和替換在JavaScript

+0

啊,我錯過了最後一句話。是否有理由說您使用JavaScript來插入'style',但不想使用JavaScript來正確格式化/呈現插入的'樣式'? –

+0

我正在加載樣式表w/javascript,因爲我想創建使用js/html/css但只包含一個'require()'類型調用的自包含插件。我正在處理一個龐大的代碼庫,我不知道每個css文件,如果我只是在css內容上使用'.replace()',我可以很容易地引入錯誤(例如,如果文件包含兩個路徑圖像/和圖像/一些其他插件/圖像/)。 – aaronstacy

回答

2

CSS的這種能力和緩存是當你包含CSS內聯時丟失的兩件大事。

您可以爲小圖像(如子彈或線條)做的一件事是將它們轉換爲data: URL,而不用擔心相對URL。

+1

我認爲即使我將內容加載爲文本而不是CSS,文件仍然會被緩存。例如,如果我多次點擊「刷新」按鈕,服務器日誌就會指出瀏覽器不重新請求相關的css文件。 – aaronstacy

+1

什麼CSS文件?包含CSS文本的HTML文件被緩存,但如果您在多個HTML文件中使用相同的CSS文本,則服務器必須在每個HTML文件中發送它,因爲瀏覽器(或代理或服務器)無法緩存*部分*頁面。 – brianary

+0

我將CSS文件作爲文本加載,然後將其作爲