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