html - 如何检查网站中是否实现了 css 类?

标签 html css

我们正在做 POC,我们要求客户只在网站上添加脚本标签。脚本标签是指我们网站中的javascript文件。当我们的脚本标签被执行时,我们使用脚本标签的位置将 HTML 代码注入(inject)父网站。

我们注入(inject)的 HTML 代码包含在我们站点中没有任何定义的 css 类,因此它从父站点获取基本 HTML 标签的继承 css。

问题是如何检查父站点是否在样式表文件中实现了类,这样如果父站点中没有定义类,我们就可以为我们的类添加默认定义。

例子: 假设我们注入(inject)的 HTML 代码片段包含以下 div。

<p>Property Details</p>

假设 parent site

标签的 css 定义,如下所示

p
{
    font-size: 16px;
    font-weight: bold;
}

假设我们引用了我们自己的 css 文件路径,它也有

的定义,如下所示

p
{
    background-color: yellow;
}

(注意:父站点的样式表引用将始终位于我们 HTML 代码段的样式表引用之上。)

在上述情况下,

的字体大小应为 16px 且字体粗细,这在父站点 css 文件中定义。

但是,如果父站点 css 文件没有定义

,那么

的样式应该是背景黄色,这在我们的 HTML 代码片段中定义。

p>

最佳答案

你可以尝试这样的事情(正如 Cray 在评论中所建议的那样)

function isDefined(selector) {
  for (var i = 0; i < document.styleSheets.length; i++) {
    var sheet = document.styleSheets[i];
    for (var j = 0; j < sheet.cssRules.length; j++) {
      return sheet.cssRules[j].selectorText == selector;
    }
  }
}

var styleElement = document.createElement("style");
styleElement.type = 'text/css';
document.head.appendChild(styleElement);

var myStylesheet = document.styleSheets[document.styleSheets.length - 1];

if (!isDefined("p")) {
  myStylesheet.insertRule("p { background-color: yellow; }")
}

if (!isDefined("h1")) {
  myStylesheet.insertRule("h1 { background-color: yellow; }")
}
p {
  font-size: 12px;
}
<h1>hello</h1>
<p>world</p>

这是一个简单的例子,但如果你想处理客户端定义 p.class-name 的情况,你需要扩展它。或 div p选择器。
请注意,由于这些选择器具有更高的优先级,因此作为解决方法,客户端可以覆盖您的更改。

关于html - 如何检查网站中是否实现了 css 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56034464/

相关文章:

javascript - 添加内容时设置空div的高度保持静态

css - 与 css 中的宽度有些混淆

html - 并非所有 CSS 样式类的属性都适用

javascript - 如何在模板中显示导航页面的路径结构(站点地图)

javascript - 如何从 JavaScript 中的 AJAX 响应中提取正文 (<body>...</body>) 标签之间的片段

java - 从 WEB-INF 中的 JSP 访问资源

html - 用 2 个分隔线分割屏幕

jQuery Mobile CSS 滚动和点击

html - 大型菜单 div 不会悬停在 Internet Explorer 上嵌入的 YouTube 上

ipad - 将 iPad 的纵向和横向模式的 css 分开的首选方法是什么?