所以我有以下代码
所以基本上这个代码适用于IE和Mozilla,但不适用于Chrome.实际上,当你运行document.styleSheets [0] .cssRules时,它返回一个CSSRulesList对象(在IE和Mozilla中),但在Chrome中它返回null.顺便说一句,对于嵌入式样式,这个对象似乎甚至可以在Chrome中运行.
那么这个功能在Chrome中实际上不可用吗?如果是这样,是否有Chrome替代方案可让您使用Javascript处理外部样式表/文件?
document.styleSheets[0].rules[0].style.color = "blue";
此代码段可能有助于查看支持哪个集合.建议首先使用cssRules集合,如果不支持,则使用规则集合.
if (document.styleSheets[0].cssRules)
document.styleSheets[0].cssRules[0].style.color = "blue";
else if (document.styleSheets[0].rules)
document.styleSheets[0].rules[0].style.color = "blue";
编辑
下面的代码段在IE8,IE11,Firefox,Chrome,Safari和Opera上运行正常;在我的本地和生产服务器上;它也适用于jsbin;但它不适用于jsfiddle – 在任何上述浏览器上!
如果我将样式部分更改为此
上面的代码段仅适用于IE11.因此,它似乎是一个跨域策略问题,因为Firefox说同源策略不允许在http://external-server/styles.css上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.
那么,@ import的提示失败了!但是,让我们检查从外部服务器收到的标头
Remote Address: x.x.x.x:x
Request URL: http://www.external-domain.com/styles.css
Request Method: GET
Status Code: 200 OK
+[Request Headers] 10
-[Response Headers] 11
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Encoding: gzip
Content-Length: 105
Content-Type: text/css
...
我们可以看到,我们有样式,但我们无法访问或更改它们. Chrome和Opera都在说
`Uncaught TypeError: Cannot set property 'color' of undefined`;
Firefox的说法相同但更详细
`TypeError: document.styleSheets[0].cssRules[0].style is undefined`
最后,甚至IE11也有相同的意见:)
`SCRIPT5007: Unable to set property 'color' of undefined or null reference.
File: css.html,Line: 30,Column: 4`
那么,此时还有一件事要考虑 – CORS请求?! IE 8,Firefox 3.5,Chrome 3,Opera 12,Safari 4支持CORS …
使用CORS访问托管在外部域上的CSS
Meta charset="utf-8">
就是这样,它有效!刚刚在IE8,Opera和Safari上测试过.但是……只有在Web服务器上启用了Access-Control-Allow-Origin,否则你会收到这样的错误
XMLHttpRequest无法加载http://external-domain/styles.css.请求的资源上不存在“Access-Control-Allow-Origin”标头.因此不允许原点’null’访问.
在我的服务器上它没有启用所以我必须自己做.如果一个人在共享主机上,这可能是一个问题.
偏离主题:如何在Apache上启用Access-Control-Allow-Origin
首先,启用Apache Headers模块
ln -s /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load
重启Apache
/etc/init.d/apache2 restart
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin,x-requested-with,content-type"
Header add Access-Control-Allow-Methods "PUT,GET,POST,DELETE,OPTIONS"
或者将它们添加到.htaccess文件中.最后两个可以省略.如果您想限制只访问某人,请将上一行中的“*”替换为“www.my-kitchen.com”.另一次重启web-server就是这样.