2010-07-12 76 views
4

是否有任何方法來獲取CSS文件的原始內容?從瀏覽器中獲取原始CSS文件內容

讓我們想象一下,我想從CSS文件中獲取任何供應商特定的CSS屬性。我需要以某種方式獲取CSS內容並相應地解析它們。或者我可以使用DOM來訪問CSS文件的規則。

問題是,在使用DOM的同時,大多數瀏覽器(除< = IE8外)都傾向於去掉所有與瀏覽器引擎無關的自定義屬性(webkit去掉-moz和-o和-ms)。因此不可能獲取CSS內容。

如果我要使用AJAX獲取CSS文件的內容,那麼如果該CSS文件託管在另一個域中,那麼相同的原始策略會中斷並且無法獲取CSS內容。

如果有人使用跨域AJAX方法,那麼只會有一個JSONP解決方案,因爲我們沒有解析任何javascript代碼(因此沒有回調),所以它不起作用。

是否有任何其他方式來獲取內容?

回答

1

如果CSS文件在同一個域中你在運行該腳本的頁面,你可以只使用AJAX在CSS文件中拉:

$.get("/path/to/the.css", function(data) {/* ... */}); 

如果沒有,你可以嘗試使用雅虎管道作爲代理並使用JSONp獲取CSS。

至於解析,你可以檢查出Sizzle解析選擇器。您還可以使用CSS語法(發佈在CSS標準中)使用JS lex/yacc分析器來解析文檔。我會離開你去創作。

祝你好運!

0

不,你幾乎覆蓋了它。 IE以外的瀏覽器會從style/currentStyle對象和document.styleSheets接口中刪除其對象模型中的未知規則。 (當然,它通常是IE6-7的CSS,你想修補它的CSS。)

如果你想從外部域吸取樣式表,你需要代理輔助AJAX。解析CSS將是一件非常討厭的工作,特別是如果你需要複製瀏覽器的怪癖。我會竭盡全力避免任何這樣的事情!

0

JSONP仍然是一個有效的解決方案,雖然它會有些傷害眼睛。基本上,除了回調填充之外,您還必須添加一個JSON屬性「padding」並將CSS作爲值傳遞。例如,一個腳本調用,http://myserver.com/file2jsonp/?jsonp=myCallback&textwrapper=cssContents可能返回這一點:

myCallback("cssContents":"body{text-decoration:blink;}\nb{text-size:10em;}"); 

你不得不文本編碼所有換行符和引號包裹CSS文件的內容(編碼任何現有的報價之後)。我不得不採用Twitter XML Feed來做到這一點。當我建造它時,感覺這是一個可怕的想法,但它的工作。

相關問題