如何阻止/允许访问document.styleSheets信息,以及这是什么原因

时间:2014-08-04 21:50:38

标签: javascript css

我最近发现了document.styleSheets API,它允许获取网站使用的样式表。

使用很简单,例如document.styleSheets[0].cssRules将为我提供页面上第一个样式表的所有css规则。所以当我在google.com的控制台中写这个时,它会返回一个正确的列表,但是当我在stackoverflow页面的控制台中写入时,它会返回null

我认为某些网站可能阻止此信息。我的问题是:

  • 如何阻止/允许此为网站所有者。
  • 阻止它的原因是什么? (任何想要获得它的人都可以通过复制样式表并解析它来获得它)

P.S。这个question看起来很相似,但事实并非如此。我不是在寻找如何克服这个问题,我正在寻找原因,我怎么能阻止这个作为拥有者。我也怀疑这是跨性别问题。

P.P.S。这是一个证据,我得到null,有些人没有得到null是很奇怪的。 enter image description here

1 个答案:

答案 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代码访问它。 : - )