webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob JavaScript aktiviert ist PHP

Gibt es eine Möglichkeit zu überprüfen, ob JavaScript mit PHP aktiviert ist? Wenn das so ist, wie?

49
Will

Nein, das ist nicht möglich, da PHP eine serverseitige Sprache ist und auf den Browser des Clients in keiner Weise oder Form zugreift (der Client fordert vom PHP -Server).

Der Client stellt möglicherweise einige Metainformationen über HTTP-Header bereit, er sagt jedoch nicht unbedingt aus, ob der Benutzer JavaScript aktiviert hat oder nicht, und Sie können sich sowieso nicht darauf verlassen.

47
Waleed Amjad

vielleicht eine einfachere Option ...

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

Technisch nicht, denn wie in den anderen Antworten bereits erwähnt, ist PHP streng serverseitig, aber Sie könnten dies tun ...

Ausgabe auf der Seite PHP auf dem Server (viel HTML wurde aus Gründen der Kürze gelöscht)

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

Setzen Sie dann in myPage.php eine Sitzungsvariable, um anzuzeigen, dass der Client JS unterstützt

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

Aber wirklich, einfach <script></script><noscript></noscript>-Tags verwenden, viel, viel weniger Aufwand ...

17
Chris Thompson

// Hier ist eine Lösung: // es funktioniert perfekt

<?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';
}

?>

// Und dann in get-javascript-status.php: 

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

Sie können nicht feststellen, ob ein Browser JS aktiviert hat, aber Sie können feststellen, ob der Browser JS unterstützt http://php.net/manual/en/function.get-browser.php

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

Davon abgesehen ist das wahrscheinlich nicht von großem Nutzen. Sie sollten die Erkennung von JS von PHP aus überdenken. Es sollte nicht erforderlich sein, wenn Sie progressive Verbesserung verwenden. Dies bedeutet, dass JS nur die Funktionen hinzufügt, die bereits auf der Seite enthalten sind.

6
Juan Mendes

Hier ist ein kleines Include, das ich erfunden habe, um festzustellen, ob js aktiviert ist. Hoffe das hilft aus ...

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

Platzieren Sie den obigen Code in der Header-Datei nach dem Titel-Tag und setzen Sie ihn wie [disable.html] für die Umleitung.

3
Anish Bhut

Sie können es mit 2 metod versuchen:

  • setzen von Cookies mit JS und Erkennen von ihnen aus PHP
  • erstellen eines Formulars mit einem verborgenen Feld und einem leeren Wert; und dann einen Wert mit JS zuweisen, wenn das Feld den Wert erhält - JS ist ON, andernfalls ist es deaktiviert. Das Formular musste jedoch erst gesendet werden, bevor PHP den Wert des ausgeblendeten Felds anfordern kann.

wenn Sie vor dem Laden der Seite feststellen möchten, ob die Einstellung JS aktiviert ist, können Sie Folgendes versuchen (ich weiß nicht, ob dies funktioniert):

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

es gibt ein gutes Tutorial zu diesem Thema unter Adresse http://www.inspirationbit.com/php-js-detection-of-javascript-browser-settings/

3

So entfernen Sie Bots mit deaktiviertem 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>';    

 }

?>

Niemand kann beispielsweise curl -H "Cookie: JSEnabled = XXXXXXXXXXXXXXXXXX" Verwenden, da er nicht weiß, ob Sie den Hash berechnen.

2
Konstantin

bevor Sie versuchen, müssen Sie Ihr Browser-Javascript deaktivieren ...

danach

Versuchen Sie diesen Code:

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

Schreiben Sie etwas in script-disabled.html

es ist Arbeit

2

PHP kann nicht verwendet werden, um festzustellen, ob Javascript aktiviert ist oder nicht. Verwenden Sie stattdessen <noscript>, um eine alternative Nachricht anzuzeigen/etwas zu tun.

2
Shoban
<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>
2
Adrian Soiman

Trotz der vielen Leute, die Sie dazu aufgefordert haben, können Sie nicht nach einer clientseitigen Scripting-Technologie suchen. Wenn die Zieltechnologie über HTTP-Funktionen verfügt, können Sie IMMER tun, schreiben Sie einfach einen Überprüfungsschritt aus. Das bedeutet im wörtlichen Sinn, Javascript zu überprüfen, ist es, Javascript auszuführen. Wenn Javascript auf der Browserseite deaktiviert ist, kann nicht überprüft werden, ob der Client Javascript-fähig ist (wie Dillo mit seiner Standardkonfiguration oder anderen).

UPDATED: Ich habe dieses Skript entwickelt, weil ich einige der Beispiele hier teste und es scheint, dass jeder Copypasting ohne jegliche Art von Tests durchführt. Der Code steht auch im Gist https://Gist.github.com/erm3nda/4af114b520c7208f8f3f (aktualisiert)

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

Diese Lösung benötigt keine weiteren Dateien, sondern nur eine Iteration, wenn Sie einen Javascript-fähigen Browser ausführen. Der Wert wird unter Verwendung eines GET mit einer einfachen Variablen an PHP zurückgegeben. Jeder kann jedoch die Ausgabe mit cURL an URL +? Sessionstart = 1 fälschen, sofern Sie nicht mehr Logik hinzufügen.

1
erm3nda

Erstellen Sie ein Cookie mit JavaScript und lesen Sie es mit PHP.

1
M_R_K

So überprüfe ich, ob Javascript und Cookies aktiviert sind oder nicht http://asdlog.com/Check_if_cookies_and_javascript_are_enabled

Ich kopiere/füge es hier ein

<?
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>
1
wlf

Mit diesem Basis-Ajax können Sie Daten trennen, die der Client basierend auf Javascript sieht oder nicht.

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! 
?>
1
user3510753

Vor kurzem hatte ich folgendes Dilemma:

Ich verwende eine PHP -Funktion, die ein QR-Bild generiert, das sich auf die aktuelle URL bezieht, was für mobile Geräte sehr nützlich ist. Die Funktion funktioniert gut, aber da meine Site ein Shared Hosting hat, gibt es einige Einschränkungen für die Nutzung von CPU und RAM. Diese Funktion ist zu umfangreich und beansprucht viel CPU-Zeit und RAM. Die Hosting-Jungs baten mich darum, die Nutzung zu reduzieren.

Nach einigen Versuchen kam ich schließlich auf die Idee, dass ich etwas CPU & RAM von Suchmaschinen-Bots einsparen kann. Es ist schwierig, einen Bot anhand der Browseridentifikation zu erkennen, aber für alle Bots ist kein JS aktiviert. Dies ist das Hauptkriterium, nach dem ich erkannte, ob es sich um einen echten Browser oder um einen Bot handelt. Um zu erklären, wie wichtig es ist, die Ausführung von Code zu verhindern, der für Suchmaschinen nichts mehr ergibt (in meinem Fall wirkt sich QR nicht auf Suchmaschinen aus), kann ich sagen, dass gerade Google-Bot etwa 16.000 Crawls pro Tag auf meiner Website macht Seite? ˅.

Also habe ich diese sehr einfache Sache gemacht, die sehr geholfen hat:

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

Dieser Code verwendet JS, um eine Zeile mit PHP Code zu schreiben. Diese Zeile wird nur geschrieben, wenn JS aktiviert ist. 

Natürlich können Sie das 'noscript'-Tag verwenden, wenn Sie etwas anzeigen möchten, wenn JS deaktiviert ist. Diese Methode zeigt jedoch, wie einige PHP nur ausgeführt werden, wenn JS aktiviert ist.

Hoffe das hilft.

1
Reflective

Sie können ein Cookie mit Javascript setzen und die Seite anschließend mit Javascript erneut laden. Anschließend müssen Sie mit PHP prüfen, ob der Cookie gesetzt ist, ob Javascript aktiviert ist!

0
tyranitar

Es ist 2013. Lassen Sie einfach die Nicht-js-Vorlagen in einem body > noscript-Tag von Ihrem Skript rendern, und behalten Sie in Ihrem CSS die Anzeige des main-js-Site-Containers div bei: none; Danach fügen Sie etwas wie <script>$('#container').show();</script> ein, unmittelbar nachdem Sie Ihr #container -Div div geschlossen haben, und vor Ihrem Noscript-Tag. (wenn Sie natürlich jquery verwenden).

Wenn Sie dies auf diese Weise tun, wird der HTML-Code für die nicht für js aktivierten Browser automatisch angezeigt, und für die js-fähigen Browser wird nur die js-Site angezeigt.

Wenn Sie sich Sorgen machen, dass die Seitengröße mit zu viel Markierungen übermäßig aufgebläht wird, können Sie dasselbe tun, statt <div id="content"></div> leer zu lassen, dann mit dem js-Code statt nur dem div-Befehl einen Ajax-Aufruf zum Abrufen des Inhalts zu verwenden es.

Nebenbei bemerkt würde ich wahrscheinlich zusätzliche CSS-Dateien für die Nicht-js-Site in das noscript-Tag einschließen, um Bandbreite zu sparen. 

0
SublymeRick

Nehmen Sie an, dass Ihre Haupt-PHP-Seite davon ausgeht, dass jscript deaktiviert ist, und fügen Sie einen <script> hinzu, um zur jscript-fähigen App im <head> umzuleiten. Wenn der Benutzer Ihre erste Seite tatsächlich verwendet, gehen Sie davon aus, dass jscript deaktiviert ist.

0
Blindy

Andere Option: Wenn Sie nicht prüfen müssen, ob JS in der ersten Ansicht der Besucher (Hauptseite) aktiviert ist, können Sie mit js ein Cookie setzen. Auf der nächsten Seite können Sie mit PHP überprüfen, ob der Cookie da ist ...

0
NarfkX

Da PHP Server-Seite ist, können Sie in PHP nicht wissen, ob der Client Javascript aktiviert hat, es sei denn, Sie verwenden Sitzungen (oder eine andere Methode zum Speichern von Daten zwischen Anforderungen) und senden zunächst Code an den Client antwortet.

Wenn Sie am Anfang Ihrer Datei PHP Folgendes angeben, wird der Client an dieselbe URL umgeleitet, wobei entweder 'js = 0' oder 'js = 1' an die Abfragezeichenfolge angehängt wird, je nachdem, ob sie Javascript aktiviert haben oder nicht. Beim Empfang der umgeleiteten Anforderung zeichnet das Skript das Ergebnis in einer Sitzungsvariablen auf und leitet es anschließend wieder an die ursprüngliche URL zurück, dh ohne das angehängte 'js = 0' oder 'js = 1'. Jetzt mit der Sitzungsvariablen entsprechend der Javascript-Fähigkeit des Clients.

Wenn Sie sich nicht dafür interessieren, wie Ihre Abfragezeichenfolge in der Adressleiste des Benutzers aussieht, können Sie die zweite Umleitung überspringen und einfach die Sitzungsvariable festlegen. Während diese Umleitungen stattfinden, wird dem Benutzer eine kurze informative Nachricht angezeigt (auch etwas, das Sie überspringen könnten, wenn Sie sich nicht darum kümmern).

<?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
}
?>
0
oscarjd74

Sie können logisch die Logik (default/switch) verwenden. In diesem Beispiel habe ich die Variable in PHP gedruckt:

PHP:

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

JS: (in meinem Dokument fertig)

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