読者です 読者をやめる 読者になる 読者になる

[ASP.NET] JavaScript のクエリ文字列にファイルの更新日付を挿入する

よくわからないタイトルになってしまいましたが...
JavaScript ってブラウザにキャッシュされるので、普通に読み込ませていると
JavaScript を更新しても更新内容が反映されない。

なのでその対策として、クライアントのブラウザにてキャッシュを削除することもあるのですが、実際のお仕事とかだとクライアント側で何かやってもらうのって結構ハードルが高い...
そのため、以下のように JavaScript を呼び出す際に適当なパラメータとクエリ文字列を付加するってのがよくあります。
いわゆる Cache Busting ってやつです。

<script type="text/javascript" src="../Scripts/test.js?date=yyyymmdd"></script>

ところが、上記のような書き方だと、JavaScript ファイルを更新した際に
クエリ文字列も併せて変更しなければなりません。
忘れたりすると大変ですよね。

というわけで、JavaScript のファイルの更新日時を読み込んで、
クエリ文字列に付加するコードを vb で書いてみました。
前置きが長くなりましたが、以下のようなコードです。

JavaScript を読み込ませている部分

<script type="text/javascript" src="../Scripts/test.js?date=<%# System.IO.Directory.GetLastWriteTime(Request.PhysicalApplicationPath & "/Scripts/test.js").ToString("yyyyMMddHHmmss") %>"></script>

<% %>で囲まれている部分は埋め込みコードブロックと呼ばれる部分で、
#をつけることによりデータバインディング構文となります。

データバインディングにより、ファイルの更新日時をバインドするため、Head タグをサーバ化

<head id="headId" runat="server">


コードビハインドの Page_Load に以下を追加して完成

headId.DataBind()