Chrome和Firefox中的备用样式表切换

时间:2016-11-17 15:12:31

标签: firefox chromium jquery-3

在切换样式表时,我在Chromium 53和Firefox 49之间遇到了一些奇怪的不一致行为。

我的样式表添加如下:

<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()。)

直到jQuery 2.2.4,这在Firefox和Chromium中都没有任何问题。

现在我尝试升级到jQuery 3.1.1。

在Chromium中,根本没有问题 - 但在Firefox中,它在升级后无法正常工作。所有样式表都被禁用,风格转换器不会做任何事情。

怀疑removeAttr()已更改(jQuery现在更严格地区分属性和属性),我将setStyle更改为以下似乎更清晰的以下内容:

function setStyle(style) {
  $('link.alternate-style').prop('disabled', function() {
    return this.title != style;
  });
}

现在它适用于Firefox,但不适用于Chromium!错误是不同的 - 样式切换器工作正常,但初始化程序被破坏,页面最初将没有样式。

总结:在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的初始化。

1 个答案:

答案 0 :(得分:0)

更新:通过使用最新的dev 56版本进行测试,看来这是一个已被修复的铬虫。