カスタム CSS href を更新しようとすると、最初は正常に機能しますが、その後の更新ではページに変更が発生しません。Chrome デバッガーで href が更新されていることを確認できるので、イベントが発生し、LESS はエラーをスローしていませんが、2 回目は色が更新されません。
コードの一部を次に示します (読みやすくするために連結しています。VS 2010、MVC4 を使用しているため、less.css拡張子を使用していることに注意してください)。
<link href="/Content/themes/customizable_default.less.css" id="CustomCSS" rel="stylesheet/less" type="text/css">
<a class="ToggleButton btn-primary" CssUrl="/Content/themes/customizable_default.less.css">Default CSS</a>
<a class="ToggleButton btn-primary" CssUrl="/Content/themes/customizable_green.less.css">Green CSS</a>
<a class="ToggleButton btn-primary" CssUrl="/Content/themes/customizable_gray.less.css">Gray CSS</a>
<a class="ToggleButton btn-primary" CssUrl="/Content/themes/customizable_blue.less.css">Blue CSS</a>
<div class="ThemeBox">
<div class="ThemeCompartment1">
<h2>This is the title.</h2>
</div>
<div class="ThemeCompartment2">
<p>A bunch of copy goes here.</p>
</div>
</div>
<script type="text/javascript" language="javascript">
$(document).ready(function () {
// choosing a template
$('.ToggleButton').click(function (e) {
$('link#CustomCSS').attr({ href: $(this).attr('CssUrl') });
localStorage.clear();
less.refresh();
});
});
</script>
スタイルシートのリンクはヘッダーにあるため、すべてのマークアップが意味的に正しいことに注意してください (もちろん、CssUrl 属性は例外です)。リンクの href を変更すると、再度元に戻すと、新しい値は再描画されません。
例:
「Green CSS」ボタンをクリック -> link href="/Content/themes/customizable_green.less.css" -> ThemeBox が緑色に変わります。
"Red CSS" ボタンをクリック -> link href="/Content/themes/customizable_red.less.css" -> ThemeBox が赤色に変わります。
"Green CSS" ボタンをクリック -> link href="/Content/themes/customizable_green.less.css" -> ThemeBox は赤のままです。
これは .less キャッシングと関係があると思われるため、localStorage.clear()呼び出しを追加しましたが、それもless.refresh(true)も問題を解決していません。
何かご意見は?