检查JavaScript是否启用了JavaScript

时间:2010-12-15 20:27:37

标签: php javascript

有没有办法检查JavaScript是否启用了PHP?如果是这样,怎么样?

25 个答案:

答案 0 :(得分:60)

也许是一个更简单的选择...

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

答案 1 :(得分:47)

不,这是不可能的,因为PHP是服务器端语言,它不以任何方式或形式访问客户端的浏览器(客户端从PHP服务器请求)。

客户端可能会通过HTTP标头提供一些元信息,但它们不一定会告诉您用户是否启用了JavaScript,而且无论如何都不能依赖它们,

答案 2 :(得分:18)

技术上没有,因为正如其他答案所说,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>标签就可以轻松实现......

答案 3 :(得分:9)

//这是一个解决方案: //它完美无缺

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

答案 4 :(得分:6)

您无法判断浏览器是否启用了JS,但您可以判断浏览器是否支持JS http://php.net/manual/en/function.get-browser.php

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

话虽如此,这可能没什么用处。您应该重新考虑从PHP检测JS。如果您使用progressive enhancement,则不需要它,这意味着JS只会在页面上添加功能。

答案 5 :(得分:4)

这是我编写的一小部分内容,我在页面上检测是否启用了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;
      }
   }
}
?>

答案 6 :(得分:3)

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

将上面的代码放在标题标记之后的头文件中,并设置为[disable.html]以进行重定向。

答案 7 :(得分:3)

在尝试之前必须禁用浏览器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中编写内容

它的工作

答案 8 :(得分:3)

你可以试试2 metod:

  • 使用JS设置cookie并从PHP中检测它们
  • 创建一个带有隐藏字段和空值的表单;然后使用JS为它分配一些值,如果该字段获得值 - JS为ON,否则为关闭。但是在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/

上有关于此问题的精彩教程

答案 9 :(得分:3)

<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 :(得分:2)

PHP不能用于检测是否启用了javascript。而是使用<noscript>来显示备用消息/执行某些操作。

答案 11 :(得分:2)

摆脱已禁用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” 因为他们不知道你计算哈希的算法。

答案 12 :(得分:1)

最近,我遇到了以下困境:

我使用PHP函数生成与当前URL相关的QR图像,这对移动设备非常有用。该功能工作正常,但我的网站在共享主机上,CPU和RAM使用有一些限制。这个功能很重,耗费了大量的CPU时间和内存,因此托管人员要求我减少使用量。

经过一番尝试,我终于明白我可以节省一些CPU和电脑。来自搜索引擎机器人的RAM使用情况。通过浏览器识别很难识别机器人,但所有机器人都没有启用JS,这是我用来检测它是真实浏览器还是机器人的主要标准。为了解释防止执行代码的重要性,这些代码不会为搜索引擎提供任何更多(QR,在我的情况下,不会影响搜索引擎),我可以说只是谷歌机器人每天在我的机器人上做大约16000次爬行站点。

所以我做了这个非常简单的事情,它有很多帮助:

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

此代码使用JS编写一行PHP代码,因此只有在启用JS时才会编写此行。

如果要在禁用JS时显示某些内容,可以使用'noscript'标记,但此方法显示了仅在启用JS时如何执行某些PHP。

希望这有帮助。

答案 13 :(得分:1)

这是我检查是否启用了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>

答案 14 :(得分:1)

使用这个基本的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! 
?>

答案 15 :(得分:1)

请尽管所有人都告诉您无法检查客户端脚本技术。如果目标技术具有http功能,您可以始终执行,只需写出验证步骤即可。这意味着,从字面上看,检查javascript的方法是运行javascript。如果在浏览器端禁用了javascript,则无法检查客户端是否具有Javascript功能(如Dillo的默认配置或其他配置)

更新: 我已经开发了这个脚本,因为我在这里测试了一些示例,似乎每个人都没有进行任何类型的测试。代码也在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的浏览器即可进行迭代。使用带有简单变量的GET将值传递回PHP,但任何人都可以伪造输出cURL到url +?sessionstart = 1,除非你为它添加更多逻辑。

答案 16 :(得分:1)

使用JavaScript创建一个cookie并使用PHP读取它。

答案 17 :(得分:0)

您可以使用Javascript设置Cookie,然后使用Javascript重新加载页面。然后使用PHP,您将检查cookie是否已设置,如果它已启用Javascript!

答案 18 :(得分:0)

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

答案 19 :(得分:0)

2013年。只需让您的脚本在body > noscript标签内呈现非js模板,然后在CSS内部保留主js网站容器div display:none;之后,在关闭主#container div并在noscript标记之前立即放置<script>$('#container').show();</script>之类的内容。 (如果你当然使用jquery)。

这样做会自动显示非js启用浏览器的HTML,然后启用js的浏览器只能看到js站点。

如果您担心页面大小过大而标记过多,那么您可以执行相同的操作,但将<div id="content"></div>留空,然后使用js代码而不是仅显示div使用ajax调用为它获取内容。

另外,我可能会在noscript标记中为非js站点添加额外的css文件以节省带宽。

答案 20 :(得分:0)

你可以使用逻辑逻辑(默认/开关) - 这个例子我在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 :(得分:0)

其他选择: 如果您不必检查访问者第一个视图(主页)上是否启用了JS,您可以使用js设置cookie。在下一页,你可以检查PHP是否有cookie ...

答案 22 :(得分:0)

让你的主要php页面假设jscript已关闭,并添加<script>以重定向到<head>中的jscript-enabled应用程序。如果用户实际使用了您的第一页,则假设jscript已关闭。

答案 23 :(得分:-1)

如果检查页面何时首次加载,如果禁用了javascript,则可以运行php:

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

答案 24 :(得分:-4)

确保您拥有最新的jQuery.js

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

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