Mayaaで外部JavaScriptファイルをブラウザキャッシュさせないようにする
開発時に外部JavaScriptファイルをブラウザキャッシュさせないようにしたい。
そのためにサーバーサイドでJSファイルのパスにクエリーストリングでタイムスタンプをつける。
<script src="/js/jquery-1.5.min.js" type="text/javascript"></script> <script src="/js/hoge.js" type="text/javascript"></script> <script src="/js/fuga.js" type="text/javascript"></script>
↓これを以下のように書き換える。
<script src="/js/jquery-1.5.min.js?1297159104247" type="text/javascript"></script> <script src="/js/hoge.js?1297159104247" type="text/javascript"></script> <script src="/js/fuga.js?1297159104247" type="text/javascript"></script>
■ 実装方法
Mayaaファイル
<m:beforeRender> <![CDATA[ var QNameImpl = Packages.org.seasar.mayaa.impl.engine.specification.QNameImpl; function getHtmlAttribute(htmlNode, name) { var attr = htmlNode.getAttribute( QNameImpl.getInstance(htmlNode.QName.namespaceURI, name)); if (attr != null) { return attr.value; } return undefined; } function getTime() { return new Date().getTime(); } ]]> </m:beforeRender> <m:echo m:xpath="//script[@type='text/javascript']"> <m:attribute name="src" value="${getHtmlAttribute(originalNode, 'src') + '?' + getTime()}"/> </m:echo>
xpath で HTML上にあるすべてのスクリプトタグにマッチさせる。
マッチしたスクリプトタグの src 部分を取り出してクエリーストリングにUNIXタイムスタンプをつけたもので上書きする。
参考:
[mayaa-user:792] Re: mayaaプロセッサが当てられているタグ名を知りたい
http://ml.seasar.org/archives/mayaa-user/2009-May/000793.html
追記:
こっちのほうが簡単。srcで取れるのね。
外部jsの読み込みを強制 - 回り道日記@はてな
http://d.hatena.ne.jp/ko-suga/20110927/1317077856