ページをリロードせずに、JavaScriptを介してHTMLページ内のすべてのCSSスタイルシートをリロードしたい。
これは、常にページを更新せずにcssの変更を反映するために開発中にのみ必要です。
可能な解決策は、?id=randomnumber
css hrefsにjavascriptを付けたサフィックスですが、私はそれをしたくありません。
スタイルシートをURLを変更せずに何らかの方法で再ロードしたいのですが、ブラウザはそのCSSの新しいバージョンをロードする必要があるかどうかを決定します(サーバーが304 - Not modified
)。
これを達成する方法は?
プレーンJavascriptの場合:
var links = document.getElementsByTagName("link");
for (var x in links) {
var link = links[x];
if (link.getAttribute("type").indexOf("css") > -1) {
link.href = link.href + "?id=" + new Date().getMilliseconds();
}
}
JQueryの場合:
$("link").each(function() {
if $(this).attr("type").indexOf("css") > -1) {
$(this).attr("href", $(this).attr("href") + "?id=" + new Date().getMilliseconds());
}
});
DOMツリーがロードされた後に、必ずこの関数をロードしてください。
まず、スタイルシートのリンクタグに次のようにID(存在しない場合)を追加します。
<link id="mainStyle" rel="stylesheet" href="style.css" />
次に、Javascript(jQueryも使用)で次の関数を追加します。
function freshStyle(stylesheet){
$('#mainStyle').attr('href',stylesheet);
}
最後に、目的のイベントで関数をトリガーします。
$('#logo').click(function(event){
event.preventDefault();
var restyled = 'style.css';
freshStyle(restyled);
});
リンクされたスタイルシートの値を更新することにより、たとえそれが同じ値であっても、クライアントに強制的に再表示させることができます。実行すると、最新のファイルが表示され、(再)ロードされます。
キャッシュの問題が発生している場合は、次のようにファイル名にランダムな(疑似)バージョン番号を追加してみてください。
var restyled = 'style.css?v='+Math.random(0,10000);
お役に立てれば。上記のDillenの例も機能しますが、わずかな調整を加えた1つまたは一連のスタイルシートのみをターゲットにする場合は、これを使用できます。
達成するためのはるかに良い方法があります:
これは、常にページを更新せずにcssの変更を反映するために開発中にのみ必要です。
1つの方法は、ファイルの変更に Grunt.js から watch を使用し、次に livereload ページを使用することです。
ワークフローは次のとおりです。
これを{sass | less | stylus}プリプロセッサコンパイルなどの他のGrunt関数とチェーンして、次のようなワークフローを作成できます。
その他のフロントエンド自動化リソース:
Google社員のビデオ: http://www.youtube.com/watch?v=bntNYzCrzvE
Google Chromeブラウザーでは非常に簡単です。
F12キーを押し、右下隅にある歯車をクリックして、[キャッシュを無効にする]オプションを選択します(DevToolsが開いている間)。
Gruntの代替は Prepros を使用することです。
また、プロジェクトフォルダーのファイルウォッチャーを使用しますが、すべてのファイルに使用します。 (js、css、php)、すべての変更でページをリロードします。 (+これがcssのような小さな視覚的な変更である場合、ページが更新されず、スムーズに移行します。(色、配置などで機能します))
Gruntと同様に、ファイルをコンパイルして縮小し、指定したURL(localhostだけでなく)でライブプレビューを作成できます。 (機能はもっとたくさんあります)
特別なポートを使用して、クリック、clic、マウスホイール、入力などのイベントを同期します。