我的 javascript 包含在 X 的站点中,但我对她的站点或包含它的位置没有任何其他控制权。如果她有样式#element
,我想不管它,但如果她没有,我有一个样式表我会注入<head>
。有没有什么方法可以检测出她是否设计了它?
检查它的高度是 0 还是 1 会失败,因为它有一些内容并且浏览器会做出默认决定。
javascript/jquery/other 框架告诉 CSS 样式的特殊性的任何方式都可以回答这个问题并且令人难以置信。
我的 javascript 包含在 X 的站点中,但我对她的站点或包含它的位置没有任何其他控制权。如果她有样式#element
,我想不管它,但如果她没有,我有一个样式表我会注入<head>
。有没有什么方法可以检测出她是否设计了它?
检查它的高度是 0 还是 1 会失败,因为它有一些内容并且浏览器会做出默认决定。
javascript/jquery/other 框架告诉 CSS 样式的特殊性的任何方式都可以回答这个问题并且令人难以置信。
对于内联样式,这很容易:您可以访问element.style
对象并检查您想要的属性——或者使用它element.hasAttribute('style')
来检查属性是否在 HTML 中定义。
对于样式表应用的 CSS 规则,我建议您看一下“是否可以使用 Javascript 检查是否在样式标签内定义了某些 CSS 属性? ”这与您的要求非常相似。
如果您想过滤掉任何通用规则(如标记规则) ,使用那里描述的方法也很容易过滤只有#element
选择器的规则。
style
一种直接但不完美的方法是检查元素的属性是否具有值或元素的class
属性是否已设置,以了解是否有意为元素设置样式。
HTML
<div id="test_unstyled"></div>
<div id="test_styled" style="background-color: red;" class="something"></div>
JS
var unstyled = document.getElementById('test_unstyled'),
styled = document.getElementById('test_styled');
console.log('test_unstyled is styled?', !!(unstyled.getAttribute('style') || unstyled.className));
console.log('test_styled is styled?', !!(styled.getAttribute('style') || styled.className));
但是,此解决方案不会检测通过 CSS 选择器应用的任何样式。如果您想考虑这些,您可能必须找出浏览器应用的所有默认样式并对其进行检查,但这将很难维护,我不建议您尝试实施这种方法,除非您是愿意为此唯一目的开发和维护图书馆。
如果您要发布其他人可能使用的插件,那么实现API
允许插件的客户端决定是否要应用插件样式可能会更容易。
您还可以始终包含您的样式表,并且用户将能够通过加载他们的自定义样式表来覆盖样式。