690

今朝、JavaScript を無効にする人の数について質問する投稿がありました。次に、ユーザーが無効にしているかどうかを判断するためにどのような手法を使用できるかを考え始めました。

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

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

4

39 に答える 39

379

ここに .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>

...サイト内のすべてのコンテンツがクラス「pagecontainer」の div でラップされている場所。noscript タグ内の CSS は、すべてのページ コンテンツを非表示にし、代わりに表示したい "no JS" メッセージを表示します。これは、Gmail が実際に行っているように見えることです...そして、それが Google にとって十分であるなら、私の小さなサイトにとっては十分です。

于 2010-10-13T18:24:20.763 に答える
299

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

サーバー側の JavaScript 検出を実行する良い方法はありません。別の方法として、JavaScript を使用して Cookie を設定し、その後のページ ビューでサーバー側スクリプトを使用してその Cookie をテストすることもできます。ただし、これは、Cookie を持たない訪問者と新しい訪問者、または JavaScript が設定された Cookie を受け入れない訪問者を区別できないため、配信するコンテンツを決定するのには適していません。

于 2008-09-23T14:16:38.053 に答える
204

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/非 JS リンクを介してアクセスしたかどうかを確認したり、JS を介して Cookie を設定しようとしたりすることができます。これがない場合は JS を意味します無効になっています。これらの例はどちらもかなり些細なことであり、操作しやすいものですが、アイデアは理解できます。

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

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

次に、アクセス ログをチェックして、この画像がヒットした回数を確認します。少し大雑把な解決策ですが、ユーザーベースのパーセンテージに関する良いアイデアが得られます。

上記のアプローチ (イメージ トラッキング) は、テキストのみのブラウザーや js をまったくサポートしていないブラウザーではうまく機能しないため、ユーザーベースが主にその領域に向かっている場合、これは最善のアプローチではない可能性があります。

于 2008-09-23T14:08:33.797 に答える
47

これは私にとってうまくいったことです:javascriptが無効になっている場合、訪問者をリダイレクトします

<noscript><meta http-equiv="refresh" content="0; url=whatyouwant.html" /></noscript>
于 2009-03-04T01:07:33.103 に答える
46

目立たない JavaScript を作成して、逆の方向に進むことをお勧めします。

JavaScript が無効になっているユーザーがプロジェクトの機能を利用できるようにし、完了したら、JavaScript UI 拡張機能を実装します。

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

于 2008-09-23T14:12:54.520 に答える
44

フォーム (ログイン フォームなど) があり、サーバー側のスクリプトがユーザーが 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!

于 2008-09-24T07:06:05.193 に答える
39

<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 を試してみることです! 機能する場合は有効になり、機能しない場合は有効ではありません...

于 2014-02-07T06:08:55.370 に答える
37

本体で .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 に余分なものを含める必要はありません。

于 2012-04-25T15:05:36.497 に答える
15

ちょっと大変だけど(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 ソリューションを知っている人はいますか?

于 2010-12-08T23:36:06.053 に答える
13

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>
于 2008-09-23T14:10:11.313 に答える
13

私は常にブラウザに何か価値のあるものを提供したいと思っているので、私はよくこのトリックを使用します:

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

JavaScript を必要とする要素は、次のようなタグ内に配置します。

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

次に、ドキュメントの冒頭で、ループ内で.onloadorを使用して、JS 依存要素をオンに戻します。そうすれば、非 JS ブラウザは、サイトの JS 依存部分を見る必要がなくなります。JS 依存部分がある場合は、準備ができたらすぐに表示されます。document.readygetElementsByName('jsOnly').style.display = "";

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

于 2010-07-16T13:53:02.620 に答える
13

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

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

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

于 2008-09-23T14:08:28.633 に答える
12

これを各ページの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>

ジェイに感謝します。

于 2011-04-01T09:42:45.120 に答える
12

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

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

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

追加の HTTP 要求によってページのレンダリングが遅くならないように、おそらくこのチェックをページの末尾近くに含めたいと思うでしょう。

于 2008-09-27T06:53:18.153 に答える
11

一般的な解決策は、次のように、メタタグをnoscriptと組み合わせてページを更新し、JavaScriptが無効になっているときにサーバーに通知することです。

<!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が無効になっていることを認識します。次に、JavaScript以外の特別なバージョンのWebサイトをクライアントに送信できます。

于 2013-02-22T15:49:22.393 に答える
10

これは「最もクリーンな」ソリューション ID の使用です。

<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>
于 2015-04-02T14:04:23.883 に答える
8

JavaScriptが無効になっていると、クライアント側のコードはとにかく実行されないので、その情報をサーバー側で利用できるようにしたいという意味だと思います. その場合、noscriptはあまり役に立ちません。代わりに、非表示の入力があり、javascript を使用して値を入力します。次のリクエストまたはポストバックの後、値がそこにあれば、javascript がオンになっていることがわかります。

noscript のようなものには注意してください。最初のリクエストでは javascript が無効になっていると表示される場合がありますが、それ以降のリクエストでは有効になります。

于 2008-09-23T14:10:47.757 に答える
5

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

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

于 2008-09-23T14:16:39.550 に答える
4

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

于 2008-09-23T21:54:29.840 に答える
4

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

于 2008-09-23T14:10:48.643 に答える
4

画像タグをnoscriptタグに挿入して、サイトの回数とこの画像が読み込まれた頻度の統計を確認できると思います.

于 2008-09-23T14:14:32.723 に答える
3

ユーザーが JavaScript を無効にしているかどうか (サーバー側またはクライアント) を検出しません。代わりに、javascript が無効になっていると想定し、javascript を無効にして Web ページを作成します。これにより、 の必要性がなくなりますがnoscript、これは正しく機能せず、不要であるため、とにかく使用を避ける必要があります。

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

その後、スクリプトは単純に実行さdocument.getElementById('nojs').style.display = 'none';れ、通常の JS ビジネスに取り掛かります。

于 2011-08-31T15:03:12.100 に答える
3

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

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

于 2010-07-26T14:12:58.570 に答える
3

場合によっては、逆方向に実行するだけで十分な場合があります。JavaScript を使用してクラスを追加します。

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

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

これにより、複雑なものでメンテナンスの問題が発生する可能性がありますが、いくつかのことは簡単に修正できます。読み込まれていないときを検出しようとするのではなく、読み込まれたときにスタイルを設定します。

于 2013-01-13T09:52:06.187 に答える
3

ソリューションを追加して、JavaScript を無効にして自分のサイトにアクセスした実際のユーザー数の信頼できる統計を取得したいと考えています。チェックはセッションごとに 1 回だけ行われ、次の利点があります。

  • 100 ページまたは 1 ページにアクセスしたユーザーは、それぞれ 1 としてカウントされます。これにより、ページではなく、単一のユーザーに集中できます。
  • とにかく、ページの流れ、構造、またはセマンティックを壊さない
  • ユーザー エージェントをログに記録できます。これにより、通常 JS が無効になっている Google ボットや bing ボットなどのボットを統計から除外できます。IP、時間なども記録できます...
  • セッションごとに 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()) . "'");
于 2013-08-23T07:50:39.333 に答える
3

JS が有効な場合にのみ発生するハイジャックされた onClick() イベント ハンドラーを配置し、これを使用して、クリック/選択された URL にパラメーター (js=true) を追加してみませんか (ドロップダウン リストを検出することもできます)。値を変更します-非表示のフォームフィールドを追加します)。したがって、サーバーがこのパラメーター (js=true) を確認すると、JS が有効になっていることを認識し、ファンシーなロジックをサーバー側で実行します。
これのマイナス面は、ユーザーがサイト、ブックマーク、URL、検索エンジンで生成された URL に初めてアクセスしたときに、これが新しいユーザーであることを検出する必要があるため、URL に追加された NVP を探す必要がないことです。サーバーは次のクリックを待って、ユーザーが JS を有効または無効にしていることを判断する必要があります。また、もう 1 つの欠点は、URL がブラウザーの URL に表示され、このユーザーがこの URL をブックマークすると、ユーザーが JS を有効にしていない場合でも、js=true NVP を持つことになりますが、次のクリックでサーバーはユーザーがまだJSを有効にしているかどうかを知ることは賢明です。はぁ・・・これは楽しい・・・

于 2009-08-13T21:16:36.050 に答える
3

ここで紹介した純粋なサーバー側のソリューションを使用して Cookie を確認し、Jquery.Cookie を使用して Cookie をドロップして JavaScript を確認し、この方法で Cookie を確認します。Cookie と JavaScript の両方を確認します。

于 2012-02-09T05:25:27.633 に答える
2

noscript内のメタに更新を追加することは良い考えではありません。

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

  2. 属性値「Refresh」は非標準であるため、使用しないでください。「更新」は、ユーザーからページの制御を奪います。「更新」を使用すると、W3CのWebコンテンツアクセシビリティガイドラインで失敗が発生します---参照http://www.w3schools.com/TAGS/att_meta_http_equiv.asp

于 2009-04-03T03:06:19.177 に答える
2

何を検出しますか?JavaScript? それは不可能でしょう。gifロギングの目的だけが必要な場合は、特定のリソース (おそらく非常に小さいリソースまたは類似のリソース) を要求する JavaScript が各ページに含まれる、ある種の追跡スキームを使用できます。そうすれば、一意のページ リクエストとトラッキング ファイルへのリクエストの差を取ることができます。

于 2008-09-23T14:09:45.200 に答える
2

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

于 2010-11-18T22:14:50.253 に答える
1

以下は、出力が生成される前に一度含めることができる 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;
}
?>
于 2013-09-16T17:38:49.690 に答える
0

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

ルート フォルダーにあるファイルは 1 つだけにするのが好きです: 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>

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

于 2011-04-08T07:01:56.047 に答える
-4

奇妙な解決策に聞こえるかもしれませんが、試してみることができます:

<?php $jsEnabledVar = 0; ?>    

<script type="text/javascript">
var jsenabled = 1;
if(jsenabled == 1)
{
   <?php $jsEnabledVar = 1; ?>
}
</script>

<noscript>
var jsenabled = 0;
if(jsenabled == 0)
{
   <?php $jsEnabledVar = 0; ?>
}
</noscript>

ページ全体で「$jsEnabledVar」の値を使用します。また、JS がオフになっていることをユーザーに示すブロックを表示するために使用することもできます。

これが役立つことを願っています

于 2013-02-06T15:53:37.107 に答える