2010-07-12 108 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来做到这一点。当我建造它时,感觉这是一个可怕的想法,但它的工作。