0

在样式表之间切换时,我在 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() 在启动时使用默认值调用。)

这在 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 中使用,但不能在 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 中的初始化。

4

1 回答 1

0

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

于 2016-11-17T16:22:12.970 回答