mko*_*yak 6 javascript windows browser-feature-detection
有没有办法检测哪些Windows XP主题正在使用?
我怀疑你没有特定的api调用,但你可以通过检查一些DOM元素,即特征检测来解决这个问题.
另一个问题:经典主题甚至存在于windows vista或windows 7上吗?
编辑 - 这是我的解决方案:
function isXpTheme() {
var rgb;
var map = { "rgb(212,208,200)" : false,
"rgb(236,233,216)" : true };
var $elem = $("<button>");
$elem.css("backgroundColor", "ButtonFace");
$("body").append($elem);
var elem = $elem.get(0);
if (document.defaultView && document.defaultView.getComputedStyle) {
s = document.defaultView.getComputedStyle(elem, "");
rgb = s && s.getPropertyValue("background-color");
} else if (elem.currentStyle) {
rgb = (function (el) { // get a rgb based color on IE
var oRG =document.body.createTextRange();
oRG.moveToElementText(el);
var iClr=oRG.queryCommandValue("BackColor");
return "rgb("+(iClr & 0xFF)+","+((iClr & 0xFF00)>>8)+","+
((iClr & 0xFF0000)>>16)+")";
})(elem);
} else if (elem.style["backgroundColor"]) {
rgb = elem.style["backgroundColor"];
} else {
rgb = null;
}
$elem.remove();
rgb = rgb.replace(/[ ]+/g,"")
if(rgb){;
return map[rgb];
}
}
Run Code Online (Sandbox Code Playgroud)
下一步是弄清楚此函数在非xp机器上返回的内容和/或弄清楚如何检测窗口框.我在Windows XP中测试过这个,所以vista和windows 7可能会给出不同的颜色值,但它应该很容易添加.
以下是此操作的演示页面:
有趣的问题.我唯一想到的是检查默认按钮的大小.它在两个主题中的风格不同,我想它有不同的大小.如果您为按钮指定固定的文本大小,这可能是中途可靠的.
我将启动XP虚拟机并检查大小是否实际不同.
更新:他们确实不同.
谷歌"我感觉很幸运"按钮
想到的第二个不太可靠的方法是给元素一个CSS系统颜色,然后解析得到的计算颜色.在经典模式中,ButtonFace属性将具有特定的灰色阴影,我认为默认皮肤中的颜色不同.再次,必须进行测试.
更新:它们也有所不同.
ButtonFace CSS系统颜色
显然,如果用户对颜色和/或字体大小进行任何自定义,则两种方法都会中断.字体大小方法是更可靠的IMO,因为玩弄它的人越来越少.
当然,您必须拥有所有Windows代的比较表,因为可能,经典和默认外观的值会有所不同.
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |