【问题标题】:Alternate stylesheet switching in both Chrome and FirefoxChrome 和 Firefox 中的备用样式表切换
【发布时间】:2016-11-18 00:22:12
【问题描述】:

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

【问题讨论】:

    标签: firefox chromium jquery-3


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2016-04-19
      • 2016-02-07
      • 2011-02-25
      相关资源
      最近更新 更多