在样式表之间切换时,我遇到了Chromium 53和Firefox 49之间的一些奇怪的不一致行为。在Chrome和Firefox中切换替代样式表
我的样式表中添加这样的:
<link class="alternate-style" rel="stylesheet" title="Carbon"
type="text/css" href="assets/css/alt/Carbon.css" />
...
切换器的工作原理是这样的:
function setStyle(style) {
$('link.alternate-style')
.prop('disabled', 'disabled')
.filter(function() { return this.title == style; })
.removeAttr('disabled');
}
(使用setStyle()调用有默认值启动。)
这最近在Firefox和Chromium中工作,没有任何问题,比如jQuery 2.2.4。
现在我试图升级到jQuery 3.1.1。
在Chromium中,完全没有问题 - 但在Firefox中,它在升级后不起作用。所有样式表都是禁用的,样式转换器不会执行任何操作。
怀疑该removeAttr()已改变(jQuery的,现在的属性和属性之间的区别更严格的),我改变的setStyle到这似乎吸尘器在任何情况下,以下情况:
function setStyle(style) {
$('link.alternate-style').prop('disabled', function() {
return this.title != style;
});
}
现在,它工作在Firefox,但不是在铬!该错误是不同的 - 风格切换器工作正常,但初始化程序已损坏,页面最初是无风格的。
摘要:在2.2.4中,这两个版本的代码都可以工作。在3.1.1中,旧代码适用于Chromium,但不适用于Firefox,而新代码适用于Firefox,但不适用于Chromium。
通过测试,我分离出的代码,将在两个浏览器的工作的一部分:
function setStyle(style) {
$('link.alternate-style')
.prop('disabled', true) // <-- necessary for chromium
.prop('disabled', function() {
return this.title != style;
});
}
该行似乎是多余的 - 该属性将只是被再次改写。但评论它打破了Chromium的初始化。