問題
IEでMETAタグのRefresh指定があるページを開いた後、F5キー等で更新を行うと、それ以降Refreshによる更新が行われなくなってしまう。
解決(結論)
- JavaScriptを使う
- 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属性という独自仕様を入れたのか・・・。
どなたかこの謎に詳しい方がいらっしゃいましたら、ぜひ教えてください・・・!
コメントを残す