METAタグのRefreshによる更新がF5の後に無効になる現象

問題

IEでMETAタグのRefresh指定があるページを開いた後、F5キー等で更新を行うと、それ以降Refreshによる更新が行われなくなってしまう。

解決(結論)

  1. JavaScriptを使う
  2. METAタグの記述を変更する(ブラウザ独自仕様使います)
    旧:content=”10;url=hoge.html”
    新:content=10 url=”hoge.html”

原因

不明です・・・。恐らくはIEの仕様。

事の顛末

METAタグによってRefreshしていたんですが、F5を押すと更新が止まってしまう現象にぶち当たりました。

ひたすら調べると同じ件で悩んでいる人を発見。

http://stackoverflow.com/questions/5636539/ie-doesnt-evaluate-meta-refresh-anymore-after-pressing-f5

英語全然読めませんが、アドバイザーの人はミススペルを指摘しています。

以下が問題の更新が止まってしまうHTMLドキュメント。

[html]
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”refresh” content=”5; URL=./test.html”>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
[/html]

以下がアドバイザーの指摘。

[html]
<meta http-equiv=”refresh” content=”5;” URL=”./test.html”>
[/html]

なるほど、確かに記述を変えると正しく更新処理が動き続けます。

Q1.「え?じゃあMETAタグの構文が間違ってるんじゃね?Webで蔓延してるcontent以下を全部クオートで囲むサンプルは間違いだったんじゃないのか?」

A1.「構文は正しい。」

HTML 4.01 Transitionalではurlなんて属性はありませんでした。

じゃあそのアドバイザーが指摘したURL=””は何なんだ・・・と思ったら、どうやらブラウザの独自仕様らしいです。

IE

http://msdn.microsoft.com/ja-jp/library/ie/cc392138.aspx

FireFox9.0でも正しく動くことを確認しました。

という訳で、JavaScriptか、このURL属性を使用すれば解決します。

原因まで調べたかったのですが、それはコスト高いし難しそうだったので断念しました。

そもそもW3CはMETAによるRefreshを推奨していないようで、W3Cのサイトにrefreshを指定して飛びましょう、というサンプルはありません。

また、HTML1.0にはもともとrefreshで飛べるという仕様はなく、Netscapeの独自仕様だったようです。

上記は軽く調べただけなので定かではありません。

しかし、なぜurl属性だと上手く行ってcontent内でurl指定するとダメなんでしょうか・・・。

そしてなぜIEはW3CのHTML仕様に逆らってurl属性という独自仕様を入れたのか・・・。

どなたかこの謎に詳しい方がいらっしゃいましたら、ぜひ教えてください・・・!