7

JavaScript をサポートしていない訪問者のために、特定のページ「js.html」にリダイレクトしています。

このために、すべてのファイルに次のものがあります。

<noscript>
<meta http-equiv="Refresh" content="0;URL=js.html" />
</noscript>

もちろん、noscript を に配置する必要があるため、これは XHTML では検証されません<body>。しかし、そのコードをドキュメントの本文に配置すると、別のエラーが発生します。メタ タグはセクションでしか使用できないため、<head>ここで無限ループに陥ってしまいます。

これを検証する方法はありますか?すべてのブラウザーで問題なく動作するので、大したことではありません。アプリを検証したいだけです。

4

3 に答える 3

12

これがあなたができることです:

メタを頭に挿入しますが、たとえば2秒のリフレッシュを行います。そして、そのすぐ隣に、そのメタリフレッシュを削除するSCRIPTタグを配置します。したがって、JSユーザーはリダイレクトされません。

<meta id="refresh" http-equiv="Refresh" content="10;URL=js.html" />
<script type="text/javascript">
    $('refresh').remove();
</script>

ブラウザはすでにメタリフレッシュについて「言及」している可能性があります。したがって、JavaScriptを使用して、開始と終了のHTMLコメントを書き込むことができます(開始スクリプトタグを含めて、2番目のdocument.writeのスクリプトタグを閉じます)。

<script type="text/javascript">
    document.write("<!-- ");
</script>
<meta http-equiv="Refresh" content="2;URL=js.html" />
<script type="text/javascript">
    document.write(' --><script type="text/javascript">');
</script>

私はこれをうまくテストすることができました。

js以外のユーザーをどのように扱うかについてのヒントです。「js」というcssクラスがあり、JavaScriptユーザーのみが表示できる要素に追加します。javascriptを使用して、「js」クラスのすべての要素を表示する「js」クラスのルールを含むcssファイルを追加します。すべてのリンク(関数)は、JavaScriptなしで、またはCtrlキーを押しながらリンクをクリックする新しいタブで使用できるように設計されています。

于 2010-08-31T23:10:41.403 に答える
3

この質問への回答を含め、これについて見つけることができるすべての提案を試しましたが、どれもうまくいきませんでした。この質問に対する Kau-Boy の回答はうまくいきませんでした (メタ タグと 2 番目のコード スクリプト ブロックのほとんどの両方がコメント アウトされているため');、コメントが閉じられた後に解釈しようとする js が壊れます。つまり、次のようになります。

<script type="text/javascript">
    document.write("<!-- ");
</script>
<!-- <meta http-equiv="Refresh" content="2;URL=js.html" /><script type="text/javascript"> document.write(' -->
<script type="text/javascript">
    ');
</script>

私はそれがしたことからインスピレーションを得て、うまくいくように思われる以下をまとめました:

<script type="text/javascript">
    document.write('\x3Cscript type="text/javascript">/*'); 
</script>
<meta http-equiv="Refresh" content="0;URL=js.html" />
<script type="text/javascript">/**/</script>

基本的に、javascript が有効になっている場合、3 つのスクリプト要素を取得します。そのうちの 1 つは、javascript コメント内でだまされたメタ タグであるため、リダイレクトされません。JavaScriptが無効になっている場合、無視される2つのスクリプト要素と、邪魔されていないメタ要素しか見えないため、リダイレクトされます。

注: application/xhtml+xml コンテンツ タイプでページを提供する場合 (ドキュメントが xhtml の場合、おそらくこれを行う必要があります)、書き込みメソッドは通常無効になるため、ブラウザーで js が壊れます。 .

于 2012-12-05T16:27:40.697 に答える
2

お気づきのとおり、この問題は HTML4 では解決できません。ただし、現在 HTML5 では noscript は head で有効であるため、検証目的で HTML5 を使用できます。(とにかく、HTML5 バリデーターは HTML4 バリデーターよりもはるかに優れています)。

ただし、注意点が 1 つあります。HTML5 には未解決の問題 ( ISSUE-117 ) があり、noscript の廃止が求められているため、HTML5 が最後の呼び出しに到達するまでに、noscript が HTML5 で有効でなくなる可能性があります。

于 2010-08-31T23:32:31.587 に答える