スパイスラボ神部です。
OpenSocialアプリで開発中は外部ファイルのキャッシュを聞かせたくないので、次のような記述をするときがあります。
<script langage="javascript">document.write('<link rel="stylesheet" href="http://example.com/css/test.css?rand=' + Math.random() + '" type="text/css" />');</script>
これはこれでしっかり動作します。次にこれを
<script langage="javascript">document.write('<script language="javascript" src="http://example.com/js/test.js?rand=' + Math.random() + '" type="text/javascript" />');</script>
といったかたちで外部JavaScriptを指定しても同様にキャッシュされずに読み込んでくれます。
しかし不思議なことにこれらの行を二行続けて書くと最初に読み込まれた行しか評価されません。
Firefox, IE8ではそのような挙動で、Google Chrome では両方が読み込まれます。これは何故なんでしょう。
ちなみに
こんな方法もある
-JavaScriptメモ:javascript(.jsファイル)をキャッシュさせない2 - KUMA TYPE
と書かれているのですが、タグ中にインラインで記載された JavaScript ファイルが SSI ライクに実行されるはずもなく、アクセスログを見てみると example.js?+(new Date().getTime()) というファイルを取りに来ているだけでした。
解決
Twitterでブログエントリをつぶやいたところ、なかじまんさんからのアドバイスで解決しました!
-閉じ要素 '</script>' がないからだと思います。また、そのとき、そのままだと評価されないと思うので、'</scr'+'ipt>' とかしてごまかす必要もあります。
現在は下記のサンプルで動作を確認出来ます。
※JavaScriptを先に書いた場合
※CSSを先に書いた場合
IE, Firefox, Google Chrome すべてで動作しました。
追記
によると、さらにスマートな方法が提示されました。document.writeをHTMLコメントタグで囲むといいらしいです。こちらもやってみたいと思います!
(さらに追記)
こちらにサンプルを作ってみましたが、IEとChromeでは動作したものの、Firefox ではなぜかソースコードが表示される状態になってしまうようでした。
関連記事



コメント ( 1 )
当てずっぽうですが、文字列を先に連結しておいて、document.writeを一回だけにするとどうですかね?
投稿者: twk | 2009年11月04日 16:16
日時: 2009年11月04日 16:16