I have a page with php and other stuff in the code. What I need to do is a way to check with php if there is javascript enabled in the browser. This way, the whole page source will be prevented to be loaded, instead of using that only prevents the page from loading, but allows the source code.
3 に答える
PHPはサーバーサイド言語です。PHP はサーバー上で実行され、結果がクライアントに送信されるため、PHP でこれを行う方法はありません。サーバーは、クライアントで JavaScript が有効になっているかどうかを認識していません。
JS が無効になっているときにファイル内のコードを表示したくない場合は.html
、PHP を使用する必要はありません。必要なものを.html
ファイルに入れ、残りを JavaScript で読み込むことができます。JavaScript が無効になっている場合、残りのものは最初から読み込まれません。(これをプログレッシブエンハンスメントと呼びます。)
この例では、ディレクティブ<noscript></noscript>
内でタグを使用します。echo
<?php
echo "<noscript>You need JS enabled to view the text on this page.</noscript>";
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
document.write("<h1>Heading Text</h1>");
document.write("<p>This message appeared because you have JS enabled.</p>");
</script>
</body>
</html>
JavaScriptにページへのリクエストを発行させ、Web サイトへのアクセスを有効にするセッション変数を設定してから、ページをリロードすることができます。これは決して安全ではありません。
enable.php
何かがエコーされる前に(include / etcを介して実行できます)を除くすべてのファイルで。
...
if (!isset($_SESSION['enabled']) { ?>
<!doctype html>
<html>
<head>
...
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', '/enable.php', false);
xhr.send();
window.location.reload();
</script>
</head>
<body></body>
</html>
<?php die();
}
....
ではenable.php
、次のようにします。
$_SESSION['enabled'] = 1;
enable.php
セッションごとに 1 回だけヒットする必要があり、後でJavaScriptが無効になった場合、またはブラウザーをそこに向けて手動でヒットした場合、サーバーは違いを認識しません。このセッションでページに到達した場合、クライアントはこのセッションでJavaScriptを有効にする必要があると想定されています。