2016-11-17 60 views
0

在樣式表之間切換時,我遇到了Chromium 53和Firefox 49之間的一些奇怪的不一致行爲。在Chrome和Firefox中切換替代樣式表

我的樣式表中添加這樣的:

<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,但不是在鉻!該錯誤是不同的 - 風格切換器工作正常,但初始化程序已損壞,頁面最初是無風格的。

摘要:在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的初始化。

回答

0

更新:通過使用鉻56的最新開發版本進行測試,看起來這是一個鉻錯誤,此後已被修復。