我最近发现了document.styleSheets API,它允许获取网站使用的样式表。
使用很简单,例如document.styleSheets[0].cssRules
将为我提供页面上第一个样式表的所有css规则。所以当我在google.com的控制台中写这个时,它会返回一个正确的列表,但是当我在stackoverflow页面的控制台中写入时,它会返回null
。
我认为某些网站可能阻止此信息。我的问题是:
P.S。这个question看起来很相似,但事实并非如此。我不是在寻找如何克服这个问题,我正在寻找原因,我怎么能阻止这个作为拥有者。我也怀疑这是跨性别问题。
P.P.S。这是一个证据,我得到null
,有些人没有得到null是很奇怪的。
答案 0 :(得分:5)
我也怀疑这是跨性别问题。
是一个跨源问题。访问被阻止的原因是控制台的来源是从页面的URL(例如http://stackoverflow.com/questions/25128165/how-can-i-block-allow-access-to-document-stylesheets-information-and-what-is-th
)派生的,但Stack Overflow上的第一个样式表的URL(截至本文撰写时)是http://cdn.sstatic.net/stackoverflow/all.css?v=d75250aa015c
- a不同的起源。因此,程序化访问被拒绝。
如果你在Firefox + FireBug中尝试过,那么你会收到一条(略)更清晰的消息:Error: The operation is insecure.
在您自己的网站上,您可能从同一个来源提供CSS,因此SOP不起作用。如果您想要与Stack Overflow相同的结果,请从不同的来源提供CSS(它甚至可以是同一服务器的别名,只要它看起来与浏览器不同)。请注意,这样做会阻止您的 JavaScript代码访问它。 : - )