web-dev-qa-db-ja.com

JavaScriptが無効になっているかどうかを検出する方法

今朝何人の人がJavaScriptを無効にしているかについて尋ねる記事がありました。それから私はユーザーがそれを無効にしているかどうかを決定するためにどんなテクニックが使われるかもしれないか疑問に思い始めました。

JavaScriptが無効になっているかどうかを検出するための短い/簡単な方法を知っている人はいますか?私の意図は、ブラウザがJSを有効にしていないとサイトが正しく機能できないことを警告することです。

最終的には、JSがなくても機能するコンテンツにリダイレクトしたいと思いますが、プレースホルダーとしてこの検出を開始する必要があります。

632
MikeJ

私はあなたがJavaScript拡張コンテンツを配信するかどうかを決定しようとしていると思います。最良の実装はきれいに劣化するので、サイトはJavaScriptなしで動作します。また、説明できない理由で<noscript>要素を使用するのではなく、サーバー側での検出を意味していると思います。

サーバーサイドのJavaScript検出を実行するための良い方法はありません。別の方法として、JavaScriptを使用してクッキーを設定し、その後のページビューでサーバーサイドスクリプトを使用してそのクッキーをテストすることが可能です。ただし、Cookieのない訪問者とCookieをブロックしている訪問者をCookieのない訪問者と区別できないため、配信するコンテンツを決定するのには適していません。

276
Marc Gear

ここに.02を追加したいのですが。それは100%防弾ではありません、しかし私はそれが十分に良いと思います。

私にとっては、「このサイトはJavascriptがないとうまく動作しない」というメッセージを出すという好ましい例では、Javascriptがなくても自分のサイトが問題なく動作することを確認する必要があります。そして、一旦あなたがその道を歩み始めたら、そしてあなたはそのサイトがJSをオフにして防弾であるべきであることに気づき始めます、そしてそれは追加作業の全体の大きな塊です。

だから、あなたが本当に欲しいのは、「JSをオンにして、ばかげている」というページへの「リダイレクト」です。しかし、もちろん、確実にメタリダイレクトを行うことはできません。だから、ここに提案があります:

<noscript>
    <style type="text/css">
        .pagecontainer {display:none;}
    </style>
    <div class="noscriptmsg">
    You don't have javascript enabled.  Good luck with that.
    </div>
</noscript>

...あなたのサイトのコンテンツの all はクラス "pagecontainer"のdivでラップされています。 noscriptタグの内側のCSSはあなたのページの内容をすべて隠し、代わりにあなたが見せたい "no JS"メッセージを表示します。これは実際Gmailがやるように見える...そしてそれがグーグルにとって十分に良ければ、それは私の小さなサイトには十分十分である。

346
hairbo

noscript ブロックは、JavaScriptが無効になっているときに実行され、通常はJavaScriptで生成したものに代わるコンテンツを表示するために使用されます。

<script type="javascript">
    ... construction of ajaxy-link,  setting of "js-enabled" cookie flag, etc..
</script>
<noscript>
    <a href="next_page.php?nojs=1">Next Page</a>
</noscript>

Jsを持たないユーザはnext_pageリンクを取得します - ここにパラメータを追加して、次のページでJS/non-JSリンク経由で来たのか、JS経由でクッキーを設定しようとしたのかを知ることができます。 JSは無効です。これらの例はどちらもかなり簡単で操作が可能ですが、その考えはわかります。

JavaScriptを無効にしているユーザー数を統計的に把握したい場合は、次のようにします。

<noscript>
    <img src="no_js.gif" alt="Javascript not enabled" />
</noscript>

次にアクセスログをチェックして、この画像が何回ヒットされたかを確認します。やや粗雑な解決策ですが、それはあなたのユーザーベースにとってパーセンテージ的には良い考えです。

上記のアプローチ(画像追跡)は、テキストのみのブラウザやjsをまったくサポートしていないブラウザにはうまく機能しません。そのため、ユーザベースが主にその領域に向かって動く場合、これは最善のアプローチではないかもしれません。

193
ConroyP

JavaScriptが無効になっている場合、これは訪問者をリダイレクトします。

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
45
Ernie13

あなたのユースケースがフォーム(例えばログインフォーム)を持っていて、あなたのサーバサイドスクリプトがユーザがJavaScriptを有効にしているかどうか知る必要があるということであるならば、あなたはこのようなことをすることができます:

<form onsubmit="this.js_enabled.value=1;return true;">
    <input type="hidden" name="js_enabled" value="0">
    <input type="submit" value="go">
</form>

これにより、フォームを送信する前にjs_enabledの値が1に変更されます。サーバーサイドスクリプトが0を取得した場合、JSは取得されません。 1になればJS!

44
Andrew Hedges

控えめなJavaScriptを書くことによってあなたが逆にすることをお勧めします。

JavaScriptが無効になっているユーザーのためにプロジェクトの機能を機能させます。そして、完了したら、JavaScript UIの機能強化を実装します。

https://en.wikipedia.org/wiki/Unobtrusive_JavaScript

41
cllpse

本体に.no-jsクラスを使用し、.no-js親クラスに基づいて非JavaScriptスタイルを作成します。 JavaScriptが無効になっている場合は、すべての非JavaScriptスタイルが取得されます。JSがサポートされている場合は、.no-jsクラスが置き換えられ、通常どおりすべてのスタイルが取得されます。

 document.body.className = document.body.className.replace("no-js","js");

hTML5の定型文で使用されているトリック http://html5boilerplate.com/ / modernizrを通じて使用しますが、クラスを置き換えるために1行のJavaScriptを使用できます。

noscriptタグは問題ありませんが、cssでできる場合はなぜHTMLに余分なものが含まれているのでしょうか。

32
Abuzzy

<noscript>は必ずしも必要ではなく、XHTMLではサポートされていませんは言うまでもありません。

実施例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html>
<head>
    <title>My website</title>
    <style>
      #site {
          display: none;
      }
    </style>
    <script src="http://code.jquery.com/jquery-latest.min.js "></script>
    <script>
      $(document).ready(function() {
          $("#noJS").hide();
          $("#site").show();
      });
    </script>
</head>
<body>
    <div id="noJS">Please enable JavaScript...</div>
    <div id="site">JavaScript dependent content here...</div>
</body>
</html>

この例では、JavaScriptが有効になっていると、サイトが表示されます。そうでない場合は、「JavaScriptを有効にしてください」というメッセージが表示されます。 JavaScriptが有効になっているかどうかをテストする最良の方法は、単純にJavaScriptを試して使用することです!動作している場合は有効になっています。

30
de Raad

単純なJSスニペットを使用して、隠しフィールドの値を設定できます。ポストバックすると、JSが有効になっているかどうかがわかります。

または、ポップアップウィンドウを開いてすぐに閉じようとすることもできます(ただし、表示されることはあります)。

また、JSが無効になっているブラウザにテキストを表示するために使用できるNOSCRIPTタグもあります。

13
rslite

Noscriptタグはうまく機能しますが、本質的にnoscriptはクライアント側のチェックなので、無駄なJSファイルを提供し続けるには追加のページリクエストが必要になります。

あなたはJSでクッキーを設定することができますが、他の誰かが指摘したように、これは失敗するかもしれません。理想的には、JSクライアント側を検出し、cookieを使用せずに、そのユーザーのセッションサーバー側を設定して、JSが有効になっていることを示すことができます。

Src属性が実際にはサーバーサイドスクリプトであるJavaScriptを使用して1x1の画像を動的に追加することも可能です。このスクリプトが行うことは、JSが有効になっていることを現在のユーザーセッションに保存することです($ _SESSION ['js_enabled'])。その後、1 x 1の空白の画像をブラウザに出力することができます。このスクリプトは、JSが無効になっているユーザーに対しては実行されないため、$ _SESSION ['js_enabled']は設定されません。その後、このユーザーに提供される他のページについては、すべての外部JSファイルを含めるかどうかを決定できますが、一部のユーザーはNoScript Firefoxアドオンを使用しているかJSを使用している可能性があります。他の理由で一時的に無効になっています。

追加のHTTPリクエストによってページのレンダリングが遅くならないように、おそらくこのチェックをページの終わり近くに含めるとよいでしょう。

12
David Wees

Noscriptタグを見てみましょう。

<script type="text/javascript">
...some javascript script to insert data...
</script>
<noscript>
   <p>Access the <a href="http://someplace.com/data">data.</a></p>
</noscript>
12
anon

ちょっとタフだけど(hairboが私にアイディアを与えてくれた)

CSS:

.pagecontainer {
  display: none;
}

JS:

function load() {
  document.getElementById('noscriptmsg').style.display = "none";
  document.getElementById('load').style.display = "block";
  /* rest of js*/
}

HTML:

<body onload="load();">

  <div class="pagecontainer" id="load">
    Page loading....
  </div>
  <div id="noscriptmsg">
    You don't have javascript enabled. Good luck with that.
  </div>

</body>

どのような場合でもうまくいくだろう? noscriptタグがサポートされていなくても(いくつかのcssだけが必要です)、誰かが非cssソリューションを知っていますか?

12
borrel

これを各ページのHEADタグに追加します。

<noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
</noscript>

だからあなたは持っています:

<head>
    <noscript>
        <meta http-equiv="refresh" runat="server" id="mtaJSCheck" content="0;logon.aspx" />
    </noscript>
</head>

Jayに感謝します。

12
the_seeker_who

私はいつもブラウザに見る価値のある何かを与えたいと思うので、私はしばしばこのトリックを使います:

まず、JavaScriptを適切に実行するためにJavaScriptを必要とする部分(getElementById呼び出しなどを介して変更されるパッシブHTML要素を含む)は、そのまま使用できるように設計されています。 (それがなかったように設計されています)

JavaScriptを必要とするすべての要素は、私はタグのようなものの中に配置します:

<span name="jsOnly" style="display: none;"></span>

それから、私の文書の始めに、getElementsByName('jsOnly')のループ内で.onloadまたはdocument.readyを使用して、.style.display = "";を設定し、JSの従属エレメントをオンに戻します。このようにして、非JSブラウザは、サイトのJS依存部分を見る必要がなくなり、それがあれば、準備ができたらすぐに表示されます。

いったんこの方法に慣れてしまえば、両方の状況を処理するためにコードをハイブリッド化することはかなり簡単です。ただし、noscriptタグを試してみて、さらに利点があることを期待しています。

11
Brian

一般的な解決策は、次のように、JavaScriptを無効にしたときにページを更新してサーバーに通知するために、noscriptと一緒にmetaタグを使用することです。

<!DOCTYPE html>
<html lang="en">
    <head>
        <noscript>
            <meta http-equiv="refresh" content="0; /?javascript=false">
        </noscript>
        <meta charset="UTF-8"/>
        <title></title>
    </head>
</html>

上の例では、JavaScriptが無効になっていると、ブラウザは0秒でWebサイトのホームページにリダイレクトします。さらに、パラメータjavascript = falseもサーバーに送信されます。

Node.jsやPHPなどのサーバーサイドスクリプトは、パラメータを解析して、JavaScriptが無効になっていることを認識するようになります。それはそれからWebサイトの特別な非JavaScriptバージョンをクライアントに送ることができます。

9
Umesh Patil

これが使用されている "最もきれいな"ソリューションです。

<noscript>
    <style>
        body *{ /*hides all elements inside the body*/
            display: none;
        }
        h1{ /* even if this h1 is inside head tags it will be first hidden, so we have to display it again after all body elements are hidden*/
            display: block;
        }
    </style>
    <h1>JavaScript is not enabled, please check your browser settings.</h1>
</noscript>
9
Alpha2k

JavaScriptが無効になっていると、クライアント側のコードは実行されません。そのため、その情報をサーバー側で利用できるようにする必要があります。その場合、 noscript はあまり役に立ちません。代わりに、私は隠された入力を持っていて、値を記入するためにJavaScriptを使用するでしょう。次回のリクエストまたはポストバックの後、値がそこにある場合は、JavaScriptがオンになっていることがわかります。

Noscriptのように、最初のリクエストでjavascriptが無効になっている可能性があるが、今後のリクエストでそれが有効になる場合があるので注意してください。

8
Joel Coehoorn

たとえば、document.location = 'Java_page.html'のようなものを使用して、ブラウザを新しいスクリプトを含むページにリダイレクトすることができます。リダイレクトしないことは、JavaScriptが利用できないことを意味します。その場合は、CGIルーチンに頼るか、タグの間に適切なコードを挿入することができます。 (注:NOSCRIPTは、Netscape Navigator 3.0以上でのみ使用可能です。)

クレジット http://www.intranetjournal.com/faqs/jsfaq/how12.html

5
Brad8118

私が過去に使用した手法は、JavaScriptを使用してJavaScriptを有効にしていることを示すフラグとして機能するセッションCookieを作成することです。その後、サーバー側のコードはこのCookieを探し、見つからない場合は適切に対処します。もちろん、この手法はクッキーが有効になっていることに依存しています。

4
John Topley

私はあなたがnoscriptタグにimageタグを挿入してあなたのサイトの何回そしてどのくらいの頻度でこのimageがロードされたか統計を見ることができると思います。

4
MrVolley

検出のための良い選択肢である例をすでに人々が投稿していますが、「ブラウザがJSを有効にしないとサイトが正しく機能できないことを警告する」というあなたの要求に基づいています。基本的には、ページに何らかの形で表示される要素、たとえばバッジを獲得したときのスタックオーバーフローのポップアップ、適切なメッセージを追加してから、ページが読み込まれるとすぐに実行されるJavascriptを使用して削除します。ページ全体ではなく、DOMという意味です。

4
roryf

私が紹介した純粋なサーバーサイドソリューションを使ってクッキーをチェックします - ここ そしてJquery.Cookieを使ってクッキーを落としてjavascriptをチェックし、このようにしてクッキーをチェックします。

3
pouya

何でそれを検出しますか? JavaScript?それは不可能でしょう。単にログ記録の目的で使用したい場合は、各ページに特別なリソース(おそらく非常に小さいgifなど)を要求するJavaScriptが含まれている、ある種の追跡スキームを使用できます。そうすれば、固有のページリクエストとトラッキングファイルのリクエストの違いを理解することができます。

3
Hank Gay

ユーザーがJavaScriptを無効にしているかどうかを検出しません(サーバー側またはクライアント)。代わりに、あなたはjavascriptが無効になっていると仮定して、javascriptを無効にしてあなたのウェブページを構築します。これはnoscriptの必要性を取り除きます。

たとえば、<div id="nojs">This website doesn't work without JS</div>と言うようにサイトを構築するだけです。

それから、あなたのスクリプトは単にdocument.getElementById('nojs').style.display = 'none';をして、そしてその通常のJSビジネスについて行きます。

3
Explosion Pills

場合によっては、逆にしても十分な場合があります。 javascriptを使ってクラスを追加します。

// Jquery
$('body').addClass('js-enabled');

/* CSS */
.menu-mobile {display:none;}
body.js-enabled .menu-mobile {display:block;}

これは複雑なことでメンテナンスの問題を引き起こす可能性がありますが、それはいくつかのことに対する簡単な修正です。ロードされていないときを検出するのではなく、ロードされたときに応じてスタイルを設定します。

3

私はCSSとJavaScriptを使用して別のアプローチを考え出した。
これは単にクラスやIDをいじくり回すためのものです。

CSSスニペット:
1。 CSS IDルールを作成し、#jsDisという名前を付けます。
2。 BODY要素の後にテキストを生成するには、 "content"プロパティを使用します。 (あなたが望むようにこれをスタイルすることができます)。
3 2番目のCSS IDルールを作成して#jsEnという名前を付け、スタイルを設定します。 (わかりやすくするために、#jsEnルールに異なる背景色を付けました。

<style>
#jsDis:after {
    content:"Javascript is Disable. Please turn it ON!";
    font:bold 11px Verdana;
    color:#FF0000;
}

#jsEn {
    background-color:#dedede;
}

#jsEn:after {
    content:"Javascript is Enable. Well Done!";
    font:bold 11px Verdana;
    color:#333333;
}
</style>

JavaScriptスニペット:
1。関数を作成してください。
2。 getElementByIdを使用してBODY IDを取得し、それを変数に割り当てます。
3。 JS関数 'setAttribute'を使用して、BODY要素のID属性の値を変更してください。

<script>
function jsOn() {
    var chgID = document.getElementById('jsDis');
    chgID.setAttribute('id', 'jsEn');
}
</script>

HTML部分.
1。 BODY要素属性にID#jsDisを付けます。
2。関数名を付けてonLoadイベントを追加します。 (jsOn()).

<body id="jsDis" onLoad="jsOn()">

BODYタグのために#jsDisのIDが与えられています。
- Javascriptが有効になっている場合、それは自分自身でBODYタグの属性を変更します。
- Javascriptが無効の場合、CSSの 'content:'ルールテキストが表示されます。

#wrapperコンテナ、またはJSを使用しているDIVで遊べます。

これがアイデアを得るのに役立つことを願っています。

3
Chris Pesoa

ユーザーにJavaScriptの有効化を強制するために、各リンクのhref属性を同じドキュメントに設定します。これは、JavaScriptを有効にするかFirefoxをダウンロードするようユーザーに通知します(JavaScriptの有効化方法がわからない場合)。実際のリンクURLをリンクの 'name'属性に格納し、 'name'属性を読み取り、そこにページをリダイレクトするグローバルonclickイベントを定義しました。

これは私のユーザーベースではうまく機能しますが、少しファシストですが;)。

3
Jan Sahin

JSが有効になったときにのみ起動するハイジャックされたonClick()イベントハンドラを配置し、クリック/選択されたURLにパラメータ(js = true)を追加するだけではどうでしょうか(ドロップダウンリストも検出できます)隠しフォームフィールドを追加する値を変更します。そのため、サーバがこのパラメータ(js = true)を見たとき、JSが有効になったことを知り、それからサーバサイドの空想ロジックを実行します。
これのマイナス面は、ユーザーが初めてあなたのサイトにアクセスしたとき、ブックマーク、URL、検索エンジンが生成したURLです - あなたはこれが新しいユーザーであることを検出する必要があるでしょう。 URLに追加された場合、サーバーは次のクリックを待ってユーザーがJSが有効か無効かを判断する必要があります。また、もう1つの欠点は、URLがブラウザのURLになり、このユーザーがこのURLをブックマークすると、JSが有効になっていなくてもjs = true NVPになることです。ユーザーがまだJSを有効にしているかどうかを知るのが賢明です。ため息..これは楽しいです...

3
FirstSOURCE

Javascriptを無効にした状態で実際のユーザーの何人が私のサイトにアクセスしたかに関する信頼できる統計を得るために私のソリューションを追加したいと思います。これらの利点があるため、チェックはセッションごとに1回だけ行われます。

  • 100ページまたはわずか1ページにアクセスしたユーザーは、それぞれ1カウントされます。これにより、ページではなく単一のユーザーに焦点を合わせることができます。
  • とにかくページの流れ、構造、意味を壊さない
  • ユーザーエージェントをログに記録できます。これにより、通常JSが無効になっているGoogleボットやBingボットなど、統計からボットを除外することができます。 IP、時間なども記録できます。
  • 1回のセッションにつき1回のチェック(最小限のオーバーロード)

私のコードはajaxでPHP、mysql、jqueryを使用していますが、他の言語にも適用できます。

このようにDBにテーブルを作成します。

CREATE TABLE IF NOT EXISTS `log_JS` (
  `logJS_id` int(11) NOT NULL AUTO_INCREMENT,
  `data_ins` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `session_id` varchar(50) NOT NULL,
  `JS_ON` tinyint(1) NOT NULL DEFAULT '0',
  `agent` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`logJS_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Session_start()または同等のもの(jqueryが必要)を使用した後に、これをすべてのページに追加します。

<?  if (!isset($_SESSION["JSTest"]))
    { 
        mysql_query("INSERT INTO log_JS (session_id, agent) VALUES ('" . mysql_real_escape_string(session_id()) . "', '" . mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']). "')"); 
        $_SESSION["JSTest"] = 1; // One time per session
        ?>
        <script type="text/javascript">
            $(document).ready(function() { $.get('JSOK.php'); });
        </script>
        <?
    }
?>

このようにページJSOK.phpを作成します。

<?
include_once("[DB connection file].php");   
mysql_query("UPDATE log_JS SET JS_ON = 1 WHERE session_id = '" . mysql_real_escape_string(session_id()) . "'");
2
Unbroken

Noscriptの中でmetaにrefreshを追加するのはお勧めできません。

  1. NoscriptタグはXHTMLに準拠していないため

  2. 属性値 "Refresh"は規格外のものであり、使用しないでください。 「更新」を選択すると、ページの管理がユーザーから切り離されます。 「更新」を使用すると、W3CのWebコンテンツアクセシビリティガイドライン---参照 http://www.w3schools.com/TAGS/att_meta_http_equiv.asp で障害が発生します。

2
Gaurav Talwar

Jsが有効になっているかどうかを追跡したいだけの人にとって、状態を保管するためにajaxルーチンを使用するのはどうでしょうか。たとえば、すべての訪問者/訪問を一連のテーブルに記録します。 JSenabledフィールドはデフォルトのFALSEに設定できます。JSが有効な場合、ajaxルーチンはそれをTRUEに設定します。

2
birchy

これがひねりです! Javascriptが有効になっていてJS互換のブラウザを使用しているクライアントブラウザがあるかもしれません。しかし、Javascriptがブラウザで機能しない理由は何でしょうか(例:ファイアウォールの設定)。統計によると、これは93のシナリオのうち1のシナリオで発生します。そのため、サーバーはクライアントがJavascriptを実行できることを検出しましたが、実際は不可能です。

解決策として、クライアントサイトにクッキーを設定してからサーバーからそれを読み取ることをお勧めします。 Cookieが設定されていると、JSは正常に動作します。何かご意見は ?

これはPHPスクリプトです。これは、出力が生成される前に一度含めることができます。完璧ではありませんが、ほとんどの場合、クライアントが使用しないコンテンツやコードの配信を回避するのに十分に機能します。ヘッダコメントはそれがどのように機能するかを説明します。

<?php
/*****************************************************************************
 * JAVASCRIPT DETECTION                                                      *
 *****************************************************************************/

// Progressive enhancement and graceful degradation are not sufficient if we
// want to avoid sending HTML or JavaScript code that won't be useful on the
// client side.  A normal HTTP request will not include any explicit indicator
// that JavaScript is enabled in the client.  So a "preflight response" is
// needed to Prompt the client to provide an indicator in a follow-up request.
// Once the state of JavaScript availability has been received the state of
// data received in the original request must be restored before proceding.
// To the user, this handshake should be as invisible as possible.
// 
// The most convenient place to store the original data is in a PHP session.
// The PHP session extension will try to use a cookie to pass the session ID
// but if cookies are not enabled it will insert it into the query string.
// This violates our preference for invisibility.  When Javascript is not
// enabled the only way to effect a client side redirect is with a "meta"
// element with its "http-equiv" attribute set to "refresh".  In this case
// modifying the URL is the only way to pass the session ID back.
//
// But when cookies are disabled and JavaScript is enabled then a client side
// redirect can be effected by setting the "window.onload" method to a function
// which submits a form.  The form has a "method" attribute of "post" and an
// "action" attribute set to the original URL.  The form contains two hidden
// input elements, one in which the session ID is stored and one in which the
// state of JavaScript availability is stored.  Both values are thereby passed
// back to the server in a POST request while the URL remains unchanged.  The
// follow-up request will be a POST even if the original request was a GET, but
// since the original request data is restored, the containing script ought to
// process the request as though it were a GET.

// In order to ensure that the constant SID is defined as the caller of this
// script would expect, call session_start if it hasn't already been called.
$session = isset($_SESSION);
if (!$session) session_start();

// Use a separate session for Javascript detection.  Save the caller's session
// name and ID.  If this is the followup request then close the caller's
// session and reopen the Javascript detection session.  Otherwise, generate a
// new session ID, close the caller's session and create a new session for
// Javascript detection.
$session_name = session_name();
$session_id = session_id();
session_write_close();
session_name('JS_DETECT');
if (isset($_COOKIE['JS_DETECT'])) {
    session_id($_COOKIE['JS_DETECT']);
} elseif (isset($_REQUEST['JS_DETECT'])) {
    session_id($_REQUEST['JS_DETECT']);
} else {
    session_id(sha1(mt_Rand()));
}
session_start();

if (isset($_SESSION['_SERVER'])) {
    // Preflight response already sent.
    // Store the JavaScript availability status in a constant.
    define('JS_ENABLED', 0+$_REQUEST['JS_ENABLED']);
    // Store the cookie availability status in a constant.
    define('COOKIES_ENABLED', isset($_COOKIE['JS_DETECT']));
    // Expire the cookies if they exist.
    setcookie('JS_DETECT', 0, time()-3600);
    setcookie('JS_ENABLED', 0, time()-3600);
    // Restore the original request data.
    $_GET = $_SESSION['_GET'];
    $_POST = $_SESSION['_POST'];
    $_FILES = $_SESSION['_FILES'];
    $_COOKIE = $_SESSION['_COOKIE'];
    $_SERVER = $_SESSION['_SERVER'];
    $_REQUEST = $_SESSION['_REQUEST'];
    // Ensure that uploaded files will be deleted if they are not moved or renamed.
    function unlink_uploaded_files () {
        foreach (array_keys($_FILES) as $k)
            if (file_exists($_FILES[$k]['tmp_name']))
                unlink($_FILES[$k]['tmp_name']);
    }
    register_shutdown_function('unlink_uploaded_files');
    // Reinitialize the superglobal.
    $_SESSION = array();
    // Destroy the Javascript detection session.
    session_destroy();
    // Reopen the caller's session.
    session_name($session_name);
    session_id($session_id);
    if ($session) session_start();
    unset($session, $session_name, $session_id, $tmp_name);
    // Complete the request.
} else {
    // Preflight response not sent so send it.
    // To cover the case where cookies are enabled but JavaScript is disabled,
    // initialize the cookie to indicate that JavaScript is disabled.
    setcookie('JS_ENABLED', 0);
    // Prepare the client side redirect used when JavaScript is disabled.
    $content = '0; url='.$_SERVER['REQUEST_URI'];
    if (!$_GET['JS_DETECT']) {
        $content .= empty($_SERVER['QUERY_STRING']) ? '?' : '&';
        $content .= 'JS_DETECT='.session_id();
    }
    // Remove request data which should only be used here.
    unset($_GET['JS_DETECT'],$_GET['JS_ENABLED'],
            $_POST['JS_DETECT'],$_POST['JS_ENABLED'],
            $_COOKIE['JS_DETECT'],$_COOKIE['JS_ENABLED'],
            $_REQUEST['JS_DETECT'],$_REQUEST['JS_ENABLED']);
    // Save all remaining request data in session data.
    $_SESSION['_GET'] = $_GET;
    $_SESSION['_POST'] = $_POST;
    $_SESSION['_FILES'] = $_FILES;
    $_SESSION['_COOKIE'] = $_COOKIE;
    $_SESSION['_SERVER'] = $_SERVER;
    $_SESSION['_REQUEST'] = $_REQUEST;
    // Rename any uploaded files so they won't be deleted by PHP.  When using
    // a clustered web server, upload_tmp_dir must point to shared storage.
    foreach (array_keys($_FILES) as $k) {
        $tmp_name = $_FILES[$k]['tmp_name'].'x';
        if (move_uploaded_file($_FILES[$k]['tmp_name'], $tmp_name))
            $_SESSION['_FILES'][$k]['tmp_name'] = $tmp_name;
    }
// Have the client inform the server as to the status of Javascript.
?>
<!DOCTYPE html>
<html>
<head>
    <script>
        document.cookie = 'JS_ENABLED=1';
// location.reload causes a confirm box in FireFox
//      if (document.cookie) { location.reload(true); }
        if (document.cookie) { location.href = location; }
    </script>
    <meta http-equiv="refresh" content="<?=$content?>" />
</head>
<body>
    <form id="formid" method="post" action="" >
        <input type="hidden" name="<?=$session_name?>" value="<?=$session_id?>" />
        <input type="hidden" name="JS_DETECT" value="<?=session_id()?>" />
        <input type="hidden" name="JS_ENABLED" value="1" />
    </form>
    <script>
        document.getElementById('formid').submit();
    </script>
</body>
</html>
<?php
    exit;
}
?>
1

昨日も同じ問題を解決しなければならなかったので、ここに.001を追加しただけです。解決策は、少なくともホームページ(index.php)を使えば問題ありません。

私はルートフォルダにindex.phpというファイルを一つだけ持ちたいです。それから私はプロジェクト全体(コード、CSS、JSなど)を構成するためにフォルダを使います。そのため、index.phpのコードは次のようになります。

<head>
    <title>Please Activate Javascript</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
</head>

<body>

<script language="JavaScript">
    $(document).ready(function() {
        location.href = "code/home.php";
    });   
</script>

<noscript>
    <h2>This web site needs javascript activated to work properly. Please activate it. Thanks!</h2>
</noscript>

</body>

</html>

これが誰にでも役立つことを願っています。宜しくお願いします。

0
Jorge