web-dev-qa-db-ja.com

Chromeメタリフレッシュを使用してリダイレクトしないのはなぜですか?

私が使用しているアプリケーションには、ページを作成し、関数を使用してMETAタグを作成するPL/SQLパッケージがあります。

次のようなMETAタグを含むWebページを作成します。

 <META HTTP-EQUIV="Refresh" NAME="Refresh" CONTENT="1; URL=PaymentSubmit.html">

問題は、ChromeがNAME = "Refresh"属性を好まないことです。ページはリダイレクトされませんが、IEおよびFirefoxでは適切にリダイレクトされます

NAME属性を削除すると、次のようになり、すべてのブラウザーで機能します。

 <META HTTP-EQUIV="Refresh" CONTENT="1; URL=PaymentSubmit.html">

何が起きてる? METAリダイレクトのW3C標準が見つからないので、すべてのブラウザーが独自のルールを構成していますか? Chromeで動作するかどうかはわかりませんが、バグレポートを聞いたことがないので、Chromeで動作していたと思います。

誰もが同様の問題を抱えていますか?

ありがとう

12
jeph perro

w3c wiki をチェックすると、次の引用を見つけることができます。

Name、http-equiv、charset属性のいずれか1つを指定する必要があります。

namehttp-equivの両方の属性が設定されているのは有効なhtmlではないということです。

読む このW3CのHTMLおよびXHTMLテクニックのメタリフレッシュ時のテスト

ドキュメント内のすべてのメタ要素を検索します。各メタ要素について、値「refresh」(大文字と小文字を区別しない)の属性http-equivと、0より大きい数値の後に; 'URL = anyURL'(anyURLは、現在のページを置き換える必要があります)。

他のブラウザの動作は間違っていませんが、chromeの方が厳密です。

正しい動作についての詳細と有効なリファレンスは http://www.w3.org/TR/html5で入手できます/document-metadata.html#attr-meta-http-equiv-refresh

12
tjati

ブラウザのサポートに関する限り:

IE6でも<meta>リフレッシュのサポートがあります

使用する構文は次のとおりです。

<head>内に配置して、5秒後にページを更新します。

<meta http-equiv="refresh" content="5">

5秒後に http://example.com/ にリダイレクトします。

<meta http-equiv="refresh" content="5; url=http://example.com/">

すぐに http://example.com/ にリダイレクトします。

<meta http-equiv="refresh" content="0; url=http://example.com/">

Javascript disablersをサポートすることを計画している場合(私はあなたがすべきでないと思います/ :)

これを行う:<noscript><meta http-equiv="refresh" content="0; url=url here"></noscript>

これはHTTP標準の一部ではありません。

ただし、代替手段があります。

5秒後にページを更新するには、以下を実行します。

<body onload="javascript:setTimeout(function(){ location.reload(); },5000);">

5秒後にリダイレクトする場合は、以下を実行します。

<body onload="javascript:setTimeout(function(){ window.location = 'http://example.com';},5000);">

すぐにリダイレクトしたい場合:

<body onload="javascript:window.location='http://example.com'">

しかし、javascript disablersの代替手段はありません( yippee !!

結論:

だから、私の提案は、私の代替JavaScriptを使用することです。なぜなら、それらは not に置き換えられるためです。

ただし、<meta>更新タグは今後数年間で廃止される可能性があります。

もっと読む: http://en.wikipedia.org/wiki/Meta_refresh

10
Amit Joki

<METAタグについて、Microsoftは特定のガイドラインを公開しています。

SEOのページとサイトのガイドライン

具体的には、<meta http-equiv="refresh">要素について、Microsoftは次のように述べています。

ページリダイレクトは、新しいページの場所を含むメッセージと、ユーザーがメッセージを読むのに十分な時間の両方を提供する必要があります。タイムアウト期間が5秒未満のページリダイレクトにより、検索エンジンのランキングが低下する場合があります。

ページをリダイレクトするには、代わりにHTTPリダイレクトを使用することを検討してください。 HTTPリダイレクトは、古いページの権限を新しいページに転送する可能性が高くなります。

個人的には、<metaリフレッシュタグの代わりに、 1リダイレクト を使用することをお勧めします。 PHPでは、たとえば次のようにすることができます。

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.yourdomain.com/newpage");
?>

通常、301リダイレクトにはリソースの移動先のアドレスが含まれるため、この方法は<meta更新よりも優れています。 Webブラウザーは通常、ユーザーの操作を必要とせずに、301リダイレクトに従って自動的に新しい場所にリダイレクトされます。

some301 Redirectの定義によると、古い位置も保持されます。

301リダイレクトは、Webサイトが新しいドメイン名(URL)に移動するたびに使用する必要があります。これにより、検索エンジンはインデックスをすばやく変更し、理論的には、サイトの検索エンジンのランキングを維持します。以前のドメイン

これはすべて、不審なWebサイトの多くが<metaの更新を使用して不要なWebサイト(スパム/広告など)を開くという事実と一致しています。したがって、refreshメタタグはを使用しないでください。

他のメタタグについては、以下をお読みください: 18個のメタタグ、すべてのWebページに必要

すべてのメタタグが非常に重要であるとは限らないことに注意してください。たとえば、Googleはそれを言っています Webランキングでキーワードメタタグを使用しません

しかし、覚えておいてください:それは必要であり、必要ではないよりも、持っている必要がありません。

<META refreshを使用しないでください;)

2
Jean-Paul