Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

Технически нет, потому что, как говорили другие ответы, 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>, гораздо меньше усилий...

Ответ 4

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

<?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: /');

Ответ 5

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

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

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

Ответ 6

Вот небольшая часть, которую я составил, что у меня поверх моих страниц, чтобы определить, включен ли 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;
      }
   }
}
?>

Ответ 7

Вы можете попробовать с помощью 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/

Ответ 8

<noscript>
    <?php if(basename($_SERVER['REQUEST_URI']) != "disable.html"){ ?>
        <meta http-equiv="Refresh" content="0;disable.html">
    <?php } ?>
</noscript>

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

Ответ 9

<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>

Ответ 10

перед попыткой отключить браузер 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

его работа

Ответ 11

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

Ответ 12

Чтобы избавиться от ботов с отключенным 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" потому что они не знают вашего алгоритма вычисления хеша.

Ответ 13

Так я проверяю, включены ли 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 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>

Ответ 14

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

Я использую функцию 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.

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

Ответ 15

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

Ответ 16

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

ОБНОВЛЕНО: Я разработал этот script, потому что я тестирую некоторые из примеров здесь и, кажется, каждый делает 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, если вы не добавите к нему больше логики.

Ответ 17

С помощью этого базового 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! 
?>

Ответ 18

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

Ответ 19

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

Ответ 20

Вы можете использовать логику логики (по умолчанию/переключатель) - это пример, я напечатал переменную в 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');

Ответ 21

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

Ответ 22

Его 2013. Просто попробуйте script отобразить не-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, чтобы сэкономить на пропускной способности.

Ответ 23

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

Если вы ставите следующее в начале вашего PHP файла, клиент перенаправляется на тот же URL-адрес с добавленным к строке запроса "js = 0" или "js = 1", в зависимости от того, включен ли Javascript или не. После получения перенаправленного запроса script записывает результат в переменную сеанса, а затем перенаправляет обратно на исходный URL-адрес, т.е. Без добавленных "js = 0" или "js = 1". Получив эту вторую переадресацию script выполняется как обычно, теперь с переменной сеанса, установленной в соответствии с возможностями 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
}
?>

Ответ 24

если проверять, когда страница загружается впервые, это может запустить php:

<noscript>
  <?php
    //your php code here
  ?>
</noscript>

Ответ 25

Да.

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

//javascript
$(function(){
$('#jsEnabled2').html('Yes it is')
}) 

//php
$js - 'No';
$jscheck = 'Javascript Enabled: ';
$jscheck .= '<span id="jsEnabled">'.$js.'</span>';
print $jscheck;