2016-11-17 32 views
0

在样式表之间切换时,我遇到了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的初始化。

回答

0

更新:通过使用铬56的最新开发版本进行测试,看起来这是一个铬错误,此后已被修复。