Javascript 使用CSS返回元数据

Javascript 使用CSS返回元数据,javascript,css,metadata,Javascript,Css,Metadata,我有一个CSS样式表,它是在服务器上动态创建的,并通过标记返回。是否可以使用此样式表返回任何我可以用JavaScript读取的元数据 (用例:我返回的样式表是几个较小的样式表的组合。我希望我的JavaScript代码能够检测包含哪些较小的样式表。) 我考虑向元素添加一些自定义属性: body { -my-custom-prop1:0; -my-custom-prop2:0; } 但当我试图阅读这些时: window.getComputedStyle(document.body)['-m

我有一个CSS样式表,它是在服务器上动态创建的,并通过
标记返回。是否可以使用此样式表返回任何我可以用JavaScript读取的元数据

(用例:我返回的样式表是几个较小的样式表的组合。我希望我的JavaScript代码能够检测包含哪些较小的样式表。)

我考虑向元素添加一些自定义属性:

body {
  -my-custom-prop1:0;
  -my-custom-prop2:0;
}
但当我试图阅读这些时:

window.getComputedStyle(document.body)['-my-custom-prop1']
他们没有回来。还有其他想法吗


编辑:我最终采取了一种稍微不同的方法。我没有添加
标记,而是发出了一个AJAX请求来获取样式表,并将其文本添加到
标记中。这样,我就可以使用HTTP响应头来包含元数据。当然,这不会像标记那样跨域工作。

返回的对象实际上表示CSS 2.1使用的值,而不是计算的值

您可以通过另一种方法查询这些样式: 我刚才问过。事实证明,您必须使用javascript手动解析样式表文本。我觉得不值得费心,于是找到了一个不同的解决办法。我想,你可以使用一些聪明的技巧,比如在伪类上使用标准属性,这样会奏效。

虽然我认为这种技术是不明智的,但我开发了一些东西,并在Chrome、FF、Safari和IE8中进行了测试

首先,我选择了用于存储元数据的
list-style-image
属性,因为它可以包含
url()
参数中的任何字符串,但在任何正常情况下都不会在主体CSS中使用

然后我实现了一个通用的跨浏览器函数来
getComputedStyle
,因为这在所有浏览器中都不可用

然后,我解析了return属性,以仅获取
url(“”)
中的数据,从而生成以下函数:

var getStyle = function(el, cssprop) {
    if (el.currentStyle) {
        return el.currentStyle[cssprop];
    } else if (document.defaultView && document.defaultView.getComputedStyle) {
        return document.defaultView.getComputedStyle(el, "")[cssprop];
    } else {
        return (el.style) ? el.style[cssprop] : 0;
    }
};

var pullCSSMeta = function() {
    var aMeta = getStyle(document.body, 'listStyleImage').split('/'),
        meta = aMeta[aMeta.length - 1];

    return decodeURIComponent(meta.substr(0, meta.length - 1).replace(/"$/,''));
};
如果需要存储多条信息,可以用逗号表示数据,甚至可以存储JSON字符串。我希望你有一个很好的理由想这样做,因为我认为有更好的方式来存储元数据。。。但是你来了


哪些浏览器?(包括版本和操作系统)如果可能的话,我希望能够用所有现代浏览器阅读元数据。你能访问文本吗?我尝试了linkEle.innerText,但它返回一个空字符串(至少在Chrome中是这样)。我不知道你所说的“不明智”是什么意思。这太棒了。关于这一点,我唯一能找到的是每次加载文件时生成404的性能影响。没错,我忘了提到这一部分,谢谢。做这样的事情感觉很不舒服,但知道你能做到很有趣。我接受这个答案,因为它最接近我的要求。但我最终采取了不同的方法;请参阅我对原始问题的编辑。