Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript getComputedStyle不适用于颜色名称?_Javascript_Css_Windows_Dom_Colors - Fatal编程技术网

JavaScript getComputedStyle不适用于颜色名称?

JavaScript getComputedStyle不适用于颜色名称?,javascript,css,windows,dom,colors,Javascript,Css,Windows,Dom,Colors,我只是问我做错了什么,因为我以前做过,我不记得怎么做了,我一定是丢失了旧代码 Firefox有一个名为-moz-win-accentcolor的未记录颜色值,可用于获取Windows 10的重音颜色 如果我直接在样式表中使用该颜色名称(在我的扩展中,以匹配系统的主题),效果会很好,但是我需要将颜色调暗或调亮一点,如果不获取颜色数据本身,我就无法做到这一点 这就是我得到的,我使用window.getComputedStyle和getPropertyValue来获取颜色数据。我不管它是十六进制还是R

我只是问我做错了什么,因为我以前做过,我不记得怎么做了,我一定是丢失了旧代码

Firefox有一个名为
-moz-win-accentcolor
的未记录颜色值,可用于获取Windows 10的重音颜色

如果我直接在样式表中使用该颜色名称(在我的扩展中,以匹配系统的主题),效果会很好,但是我需要将颜色调暗或调亮一点,如果不获取颜色数据本身,我就无法做到这一点

这就是我得到的,我使用
window.getComputedStyle
getPropertyValue
来获取颜色数据。我不管它是十六进制还是RGBA,见鬼,我不管它是二进制。我只需要能够git颜色来操作颜色数据

function getComputedAccent() {
    let fakeEl = document.createElement("div");

    fakeEl.style = "background: -moz-win-accentcolor";

    return window.getComputedStyle(fakeEl).getPropertyValue("background");
}
但这只是返回一个空字符串。知道我忘了什么吗


(是的,我知道这是一个黑客,我不在乎。)

嗯,我是在装傻。代码确实有效,只是做了一点小改动

function getComputedAccent() {
    let fakeEl = document.createElement("div");

    fakeEl.style = "background-color: -moz-win-accentcolor";

    return window.getComputedStyle(fakeEl).getPropertyValue("background-color");
}

getComputedAccent()
"rgb(55, 60, 72)"
它以空字符串响应,因为
background
属性并不总是一种颜色。它可以是一个图像。把它改成背景色,你就没事了


编辑以添加更有用的代码

function getComputedAccent() {
    let fakeEl = document.createElement("div");

    fakeEl.setAttribute("style", "background-color: -moz-win-accentcolor");

    let color = window.getComputedStyle(fakeEl).getPropertyValue("background-color");
    color = color.match(/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)/);
    color.shift();
    color = color.map((value) => parseInt(value, 10));

    return color;
}

“知道我忘记了什么吗?”
background
只是多个属性的快捷名称,如
background color
background image
background position
,这些属性分别存储在CSSDOM对象中,即
background
属性本身不存在。@Teemu请参见下面的答案。在你30分钟前发布。但是“我忘记了什么”这个问题没有答案。这也是部分错误,“背景属性不是…”因为它不存在,而不是它将包含更多的内容。