Проверьте, включен ли JavaScript с помощью PHP

Есть ли способ проверить, включен ли JavaScript с PHP? Если да, то как?

Нет, это невозможно, потому что PHP – это серверный язык, он не имеет доступа к браузеру клиента каким-либо образом или форме (запросы клиента с сервера PHP).

Клиент может предоставлять некоторую метаинформацию через HTTP-заголовки, но они не обязательно говорят вам, есть ли у пользователя включен JavaScript или нет, и вы не можете полагаться на них в любом случае,

возможно, более простой вариант …

<html> <head> <noscript> This page needs JavaScript activated to work. <style>div { display:none; }</style> </noscript> </head> <body> <div> my content </div> </body> </html> 

Технически нет, потому что, как говорили другие ответы, PHP строго связан с сервером, но вы можете это сделать …

На странице PHP на сервере выводится (для краткости было удалено много HTML)

 <html> <head> <script type="text/javascript" src="jquery1.4.4.js"></script> <script type="text/javascript"> $(document).ready(function(){ $.get("myPage.php"); }); </script> </head> </html> 

Затем в myPage.php установите переменную сеанса, чтобы указать, что клиент поддерживает JS

 <?php session_start(); $_SESSION['js'] = true; ?> 

Но на самом деле просто используйте теги <script></script><noscript></noscript> , намного, гораздо меньше усилий …

// Вот решение: // работает отлично

 <?php if(!isset($_SESSION['js'])||$_SESSION['js']==""){ echo "<noscript><meta http-equiv='refresh' content='0;url=/get-javascript-status.php&js=0'> </noscript>"; $js = true; }elseif(isset($_SESSION['js'])&& $_SESSION['js']=="0"){ $js = false; $_SESSION['js']=""; }elseif(isset($_SESSION['js'])&& $_SESSION['js']=="1"){ $js = true; $_SESSION['js']=""; } if ($js) { echo 'Javascript is enabled'; } else { echo 'Javascript is disabled'; } ?> 

// И затем внутри get-javascript-status.php:

 $_SESSION['js'] = isset($_GET['js'])&&$_GET['js']=="0" ? "0":"1"; header('location: /'); 

Вы не можете определить, включен ли браузер в JS, но вы можете узнать, поддерживает ли браузер JS http://php.net/manual/en/function.get-browser.php

$js_capable = get_browser(null, true)=>javascript == 1

Сказав это, это, вероятно, не очень полезно. Вы должны пересмотреть обнаружение JS из PHP. Там не должно быть необходимости, если вы используете прогрессивное усовершенствование , а это означает, что JS добавляет только функциональность к тому, что уже есть на странице.

Вы можете попробовать 2 метода:

  • настройка cookie с помощью JS и обнаружение их из PHP
  • создание формы со скрытым полем и пустым значением; и затем присваивая ему некоторое значение с помощью JS, если поле получает значение – JS включено, иначе оно выключено. Но форма должна была быть представлена ​​первой, прежде чем PHP сможет запросить значение скрытого поля.

если вы хотите определить, разрешить ли JS включить настройку перед загрузкой страницы, вы можете попробовать это (я не знаю, если он работает):

 <?php if (isset($_POST['jstest'])) { $nojs = FALSE; } else { // create a hidden form and submit it with javascript echo '<form name="jsform" id="jsform" method="post" style="display:none">'; echo '<input name="jstest" type="text" value="true" />'; echo '<script language="javascript">'; echo 'document.jsform.submit();'; echo '</script>'; echo '</form>'; // the variable below would be set only if the form wasn't submitted, hence JS is disabled $nojs = TRUE; } if ($nojs){ //JS is OFF, do the PHP stuff } ?> 

есть хороший учебник по этой проблеме по адресу http://www.inspirationbit.com/php-js-detection-of-javascript-browser-settings/

Вот небольшой пример, который я составил, что у меня поверх моих страниц, чтобы определить, включен ли js. Надеюсь, это поможет …

 <?php //Check if we should check for js if ((!isset($_GET['jsEnabled']) || $_GET['jsEnabled'] == 'true') && !isset($_SERVER['HTTP_X_REQUESTED_WITH'])){ //Check to see if we already found js enabled if (!isset($_SESSION['javaEnabled'])){ //Check if we were redirected by javascript if (isset($_GET['jsEnabled'])){ //Check if we have started a session if(session_id() == '') { session_start(); } //Set session variable that we have js enabled $_SESSION['javaEnabled'] = true; } else{ $reqUrl = $_SERVER['REQUEST_URI']; $paramConnector = (strpos($reqUrl, "?"))? "&" : "?"; echo " <script type='text/javascript'> window.location = '" . $reqUrl . $paramConnector . "jsEnabled=true' </script> <noscript> <!-- Redirect to page and tell us that JS is not enabled --> <meta HTTP-EQUIV='REFRESH' content='0; " . $reqUrl . $paramConnector . "jsEnabled=false'> </noscript> "; //Break out and try again to check js exit; } } } ?> 
 <noscript> <?php if(basename($_SERVER['REQUEST_URI']) != "disable.html"){ ?> <meta http-equiv="Refresh" content="0;disable.html"> <?php } ?> </noscript> 

Поместите над кодом в свой файл заголовка после тега title и установите для него подходящее значение как [disable.html] для перенаправления.

PHP не может использоваться для определения того, включен ли javascript или нет. Вместо этого используйте <noscript> чтобы отобразить альтернативное сообщение / сделать что-то.

Так я проверяю, включены ли javascript и файлы cookie или нет. http://asdlog.com/Check_if_cookies_and_javascript_are_enabled

Я копирую / вставляю его здесь

 <? if($_SESSION['JSexe']){ //3rd check js if($_COOKIE['JS']) setcookie('JS','JS',time()-1);//check on every page load else header('Location: js.html'); } //2nd so far it's been server-side scripting. Client-side scripting must be executed once to set second cookie. //Without JSexe, user with cookies and js enabled would be sent to js.html the first page load. elseif($_COOKIE['PHP']) $_SESSION['JSexe'] = true; else{ //1st check cookies if($_GET['cookie']) header('Location: cookies.html'); else{ setcookie('PHP','PHP'); header('Location: '.$_SERVER['REQUEST_URI'].'?cookie=1'); } } ?> <head> <script type="text/javascript">document.cookie = 'JS=JS'</script> </head> 

В последнее время у меня была следующая дилемма:

Я использую функцию PHP, которая генерирует QR-изображение, связанное с текущим URL-адресом, что очень полезно для мобильных устройств. Функция работает нормально, но имея мой сайт на общем хостинге, есть некоторые ограничения на использование ЦП и ОЗУ. Эта функция тяжелая, и она потребляет много процессорного времени и оперативной памяти, поэтому ребята-хостинг попросили меня уменьшить использование.

После некоторых попыток я, наконец, дошел до идеи, что я могу сэкономить использование процессора и оперативной памяти от ботов в поисковых системах. Трудно распознать бота по идентификатору браузера, но все боты не имеют JS, и это основной критерий, который я использовал для определения, является ли он настоящим браузером или это бот. Чтобы объяснить, насколько важно предотвращать выполнение кода, который ничего не даст для поисковых систем (QR, в моем случае, не влияет на поисковые системы), могу сказать, что только бот Google, например, составляет около 16000 обходов в день на моем сайт.

Поэтому я сделал очень простую вещь, которая очень помогла:

 <script language="javascript"><!-- document.write('<?php echo drawQR($_SERVER["REQUEST_URI"]);?>'); //--></script> 

Этот код использует JS для написания строки кода PHP, поэтому эта строка будет записана только при включенном JS.

Из couse вы можете использовать тег «noscript», если хотите показать что-то, когда JS отключен, но этот метод показывает, как выполнить некоторый PHP только при включенном JS.

Надеюсь это поможет.

Создайте файл cookie с помощью JavaScript и прочитайте его с помощью PHP.

Чтобы избавиться от ботов с отключенным JS:

 <?php session_start(); @$_SESSION['pagecount']++; ?> <html> <head> <?php if (!isset($_COOKIE['JSEnabled']) || strlen($_COOKIE['JSEnabled'])!=32 ) { $js_cookie=md5(md5(@$_SESSION['pagecount']) . $_SERVER['REMOTE_ADDR']); echo '<script language="javascript">'; echo 'document.cookie="JSEnabled=' . $js_cookie . '"'; echo '</script>'; echo '<meta http-equiv="refresh" content="0;url=http://example.com"/>'; } ?> <?php $js=$_COOKIE['JSEnabled']; if ($js!=md5(md5(@$_SESSION['pagecount']-1) . $_SERVER['REMOTE_ADDR'])) { $js_cookie=md5(md5(@$_SESSION['pagecount']) . $_SERVER['REMOTE_ADDR']); echo '<script language="javascript">'; echo 'document.cookie="JSEnabled=' . $js_cookie . '"'; echo '</script>'; echo "</head><body>Sorry, this website needs javascript and cookies enabled.</body></html>"; die(); } else { $js_cookie=md5(md5(@$_SESSION['pagecount']) . $_SERVER['REMOTE_ADDR']); echo '<script language="javascript">'; echo 'document.cookie="JSEnabled=' . $js_cookie . '"'; echo '</script>'; } ?> 

Никто не может использовать, например, curl -H «Cookie: JSEnabled = XXXXXXXXXXXXXXXXXX», потому что они не знают вашего алгоритма вычисления хэша.

 <html> <head> <?php if(!isset($_REQUEST['JS'])){?> <noscript> <meta http-equiv="refresh" content="0; url='<?php echo basename($_SERVER['PHP_SELF']);?>?JS='"/> </noscript><?php } ?> </head> <body> <?php if(isset($_REQUEST['JS'])) echo 'JavaScript is Disabled'; else echo 'JavaScript is Enabled'; ?> </body> </html> 

Сделайте вашу основную страницу php предполагать, что jscript выключен, и добавьте <script> для перенаправления на приложение с поддержкой jscript в <head> . Если пользователь действительно использует вашу первую страницу, предположим, что jscript отключен.

Другой вариант: если вам не нужно проверять, включена ли JS на первом представлении посетителей (основная страница), вы можете установить cookie с помощью js. На следующей странице вы можете проверить с помощью php, если файл cookie существует …

Вы можете использовать логику логики (по умолчанию / переключатель) – это пример, который я напечатал переменную в php:

PHP:

 $js = 'No'; print 'Javascript Enabled: &lt;span id="jsEnabled"&gt;'.$js.'&lt;/span&gt;'; 

JS: (в моем документе готов)

 jQuery('#jsEnabled').text('Yes'); or $('#jsEnabled').text('Yes'); 

Вы можете установить cookie с помощью Javascript, а затем перезагрузить страницу с помощью Javascript. Затем, используя PHP, вы должны проверить, установлен ли файл cookie, если он включен Javascript!

Его 2013. Просто попросите свой сценарий создать шаблоны non-js внутри тега body > noscript , а затем внутри вашего CSS сохраните ваш основной контейнер js site display: none; После этого просто поместите что-то вроде <script>$('#container').show();</script> сразу после закрытия основного # контейнера div и перед тегом noscript. (если вы используете jquery, конечно).

Выполнение этого способа автоматически покажет HTML для браузеров, не поддерживающих js, а затем браузеры с поддержкой js будут видеть только сайт js.

Если вы беспокоитесь о чрезмерном раздувании размера страницы со слишком большой разметкой, вы можете сделать то же самое, но вместо этого оставить <div id="content"></div> пустым, а затем вместо js-кода вместо показа div использует ajax-вызов для извлечения содержимого для него.

На стороне примечания, я бы, вероятно, включил дополнительные css-файлы для сайта non-js в теге noscript, чтобы сэкономить на пропускной способности.

Поскольку PHP – это серверная сторона, вы не можете знать в PHP, поддерживает ли клиент Javascript, если вы не используете сеансы (или какой-либо другой способ хранения данных через запросы) и сначала отправляете код, на который клиент отвечает.

Если вы ставите следующее в начале вашего PHP-файла, клиент перенаправляется на тот же URL-адрес, если в строку запроса добавляется «js = 0» или «js = 1», в зависимости от того, включен ли Javascript или нет. После получения перенаправленного запроса сценарий записывает результат в переменную сеанса, а затем перенаправляет обратно на исходный URL-адрес, т. Е. Без добавленных «js = 0» или «js = 1». При получении этой второй переадресации сценарий выполняется как обычно, теперь с переменной сеанса, установленной в соответствии с возможностями Javascript клиентов.

Если вам не важно, как выглядит строка запроса в адресной строке пользователя, вы можете пропустить вторую переадресацию и просто установить переменную сеанса. В то время как эти переадресации происходят, пользователю показано короткое информативное сообщение (также вы можете пропустить, если вас это не волнует).

 <?php session_start(); if (!isset($_SESSION['js']) && !isset($_GET['js'])) { $url=$_SERVER['SCRIPT_URI']; $qry='?'.($q=$_SERVER['QUERY_STRING']).($q?'&':'').'js'; die('<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><title>js check</title>'. '<script type="text/javascript">window.location.href="'.$url.$qry.'=1";</script>'. '<noscript><meta http-equiv="refresh" content="0; url='.$url.$qry.'=0" /></noscript>'. '</head><body>Hold on while we check whether you have Javascript enabled.</body></html>'); } elseif (isset($_GET['js'])) { $_SESSION['js']=$_GET['js']; $qry = preg_replace('%&?js=(0|1)$%', '', $_SERVER['QUERY_STRING']); $url = $_SERVER['SCRIPT_URI'].($qry?'?':'').$qry; die('<!DOCTYPE html><html lang="en"><head><meta charset="utf-8" /><title>js check</title>'. '<meta http-equiv="refresh" content="0; url='.$url.$qry.'" />'. '</head><body>Hold on while we check whether you have Javascript enabled.</body></html>'); } if ($_SESSION['js']) { //Javascript is enabled } else { //Javascript is disabled } ?> 

С помощью этого базового ajax вы можете разделить данные, которые клиент видит на основе javascript, или нет.

index.php

  <!DOCTYPE html> <html> <body> <script> function jsCheck() { var xhttp; if (window.XMLHttpRequest) { // code for modern browsers xhttp = new XMLHttpRequest(); } else { // code for IE6, IE5 xhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xhttp.onreadystatechange = function() { if (xhttp.readyState == 4 && xhttp.status == 200) { document.getElementById("demo").innerHTML = xhttp.responseText; } }; xhttp.open("GET", "jscheckCon.php", true); xhttp.send(); } jsCheck(); </script> <div id="demo"> no javascript </div> </body> </html> 

jscheckCon.php

 <?php echo 'we have javascript!';//you can do that you like to do with js! ?> 

Пожалуйста, несмотря на то, что все люди говорят, что вы не можете проверить технологию клиентских сценариев. Если целевая технология имеет функции http, вы можете делать ВСЕГДА, просто выпишите шаг проверки. Это означает, что буквально, способ проверить javascript – запустить javascript. Если javascript отключен на стороне браузера, невозможно проверить, поддерживает ли клиент Javascript (например, Dillo с его конфигурацией по умолчанию или другими)

ОБНОВЛЕНО: я разработал этот скрипт, потому что я тестирую некоторые из примеров здесь и, кажется, каждый делает copypasting без каких-либо тестов. Код также находится в Gist https://gist.github.com/erm3nda/4af114b520c7208f8f3f ( обновлен )

 //function to check for session after|before PHP version 5.4.0 function start_session() { if(version_compare(phpversion(), "5.4.0") != -1){ if (session_status() == PHP_SESSION_NONE) { session_start(); } } else { if(session_id() == '') { session_start(); } } } // starting the function start_session(); // create a script to run on the AJAX GET request from :P Javascript enabled browser echo '<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $.get(document.URL.substring(0, document.URL.length-1) + "?sessionstart=1"); console.log(document.URL.substring(0, document.URL.length-1) + "?sessionstart=1")} </script>; // Ajax GET request handle if ($_REQUEST['sessionstart'] == 1){ $_SESSION['js'] = 1; // save into session variable } else { session_destroy(); // force reset the test. otherwise session } // If the session variable has not saved by the AJAX call, loads again. if (!isset($_SESSION['js'])){ header("Refresh: 1"); // thats only for the first load echo "Javascript is not enabled <br>"; // Return false } else { echo "Javascript is enabled <br>"; // Return true } 

Этому решению не нужно больше файлов, просто итерация, если вы запустите браузер, поддерживающий Javascript. Значение передается обратно на PHP с использованием GET с простой переменной, но любой может подделать вывод, делая cURL на url +? Sessionstart = 1, если вы не добавите к нему больше логики.

перед попыткой вы должны отключить браузер javascript …

после этого

Попробуйте этот код:

 <html> <head> <noscript><meta http-equiv="refresh"content="0; url=script-disabled.html"> </noscript> <h1>congrats ! Your Browser Have Java Script Enabled </h1> </head> </html> 

Напишите что-то в script-disabled.html

это работает

Да.

Убедитесь, что у вас есть последний jQuery.js

 //javascript $(function(){ $('#jsEnabled2').html('Yes it is') }) //php $js - 'No'; $jscheck = 'Javascript Enabled: '; $jscheck .= '<span id="jsEnabled">'.$js.'</span>'; print $jscheck;