スタイルシートを切り替えるときに、Chromium 53とFirefox 49の間に何らかの矛盾した動作が発生しました。ChromeとFirefoxの両方でスタイルシートを切り替える
私のスタイルシートは、次のように追加されます。
function setStyle(style) {
$('link.alternate-style')
.prop('disabled', 'disabled')
.filter(function() { return this.title == style; })
.removeAttr('disabled');
}
(のsetStyle()がデフォルト値で起動時に呼び出された。)
この:
<link class="alternate-style" rel="stylesheet" title="Carbon"
type="text/css" href="assets/css/alt/Carbon.css" />
...
スイッチャーは、このように動作しますFirefoxとChromiumでjQuery 2.2.4のように問題なく動作しました。
今、私はjQuery 3.1.1にアップグレードしようとしています。
Chromiumでは、まったく問題はありませんが、Firefoxではアップグレード後に機能しません。すべてのスタイルシートは無効になっており、スタイルチェンジャーは何もしません。
removeAttrは()、私はどのような場合にはクリーナー思え以下にのsetStyleを変更(jQueryのは、今より厳密属性とプロパティを区別)変更されたことを疑っ:、
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の初期化が中断されます。