检查是否使用PHP启用了JavaScript

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

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

客户端可能会通过HTTP头提供一些元信息,但是他们并不一定会告诉你用户是否启用了JavaScript,并且不能依赖它们,

也许更简单的select…

<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设置一个会话variables来表示客户端支持JS

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

但实际上,只需使用<script></script><noscript></noscript>标签,就<script></script><noscript></noscript>很多工作。

//这里是一个解决scheme://它的工作完美

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

话虽如此,那可能没有多大用处。 你应该重新考虑从PHP检测JS。 如果你使用渐进式增强 ,应该没有必要,这意味着JS只是增加了页面上已有内容的function。

你可以尝试2 metod:

  • 用JS设置cookie并从PHP中检测它们
  • 创build一个带有隐藏字段和空值的表单; 然后用JS赋值给它,如果这个字段的值是-JS是ON,否则它是closures的。 但是在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/

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

将上面的代码放置在标题标签后的标题文件中,并将其设置为像[disable.html]一样适合redirect。

PHP不能用来检测javascript是否启用。 而是使用<noscript>显示备用信息/做某事。

这里是我编写的一个小的包含在我的页面之上,以检测是否启用了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; } } } ?> 

这是我检查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函数生成与当前URL相关的QR图像,这对移动设备非常有用。 该function正常工作,但让我的网站共享主机,有一些限制CPU和RAM使用情况。 这个function是沉重的,它消耗了大量的CPU时间和内存,所以主持人要求我减less使用量。

经过一番尝试,我终于达到了这样的想法,我可以从search引擎机器人中节省一些CPU和RAM的使用。 通过浏览器识别来识别机器人是很困难的,但是所有的机器人都没有启用JS,这是我用来检测它是真实浏览器还是bot的主要标准。 为了解释如何防止执行代码不会给search引擎(QR,在我的情况下,不会影响search引擎)更多的意义,我可以说,例如,只是谷歌机器人每天约16000爬我现场。

所以我做了这个非常简单的事情,

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

这段代码使用JS编写一行PHP代码,所以只有当JS被启用时才会写这行代码。

如果你想在禁用JS的时候显示一些东西,那么你可以使用'noscript'标签,但是这个方法只显示了当JS被启用时如何执行一些PHP。

希望这可以帮助。

使用JavaScript创build一个cookie并使用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”,因为他们不知道你的计算散列algorithm。

 <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是closures的,并添加一个<script>redirect到<head>启用jscript的应用程序。 如果用户实际使用您的第一页,假设jscriptclosures。

其他选项:如果你不'必须检查JS是否在访问者第一视图(主页)启用,你可以设置一个Cookie与JS。 在下一页,你可以检查与cookie,如果cookie存在…

你可以使用逻辑的逻辑(默认/开关) – 这个例子我打印variables在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'); 

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

它的2013年。只要你的脚本呈现非JS模板内的一个body > noscript标记,然后在您的CSS保持您的主要js站点容器div显示:无; 之后,在closures主要#container div和noscript标记之前,立即放置<script>$('#container').show();</script> 。 (如果你使用jQuery当然)。

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

如果你担心页面大小过度膨胀,那么你可以做同样的事情,但是留下<div id="content"></div> ,然后用js代码,而不是只显示该div使用ajax调用来获取它的内容。

在旁注中,我可能会在noscript标签中包含非js站点的其他css文件以节省带宽。

由于PHP是服务器端,您不能在PHP中知道客户端是否启用了Javascript,除非您使用会话(或其他方式来存储跨请求的数据)并首先发送一些客户端响应的代码。

如果在PHP文件的起始位置放置以下内容,则客户端会被redirect到相同的URL,并在查询string后面添加'js = 0'或'js = 1',具体取决于它们是否启用了Javascript。 接收到redirect的请求后,脚本将结果logging在会话variables中,然后redirect回原始URL,即没有附加“js = 0”或“js = 1”。一旦接收到第二次redirect,现在使用根据客户端Javascript能力设置的会话variables。

如果您不关心用户地址栏中查询string的外观,则可以跳过第二次redirect,只设置会话variables。 当这些redirect发生时,用户会看到一条简短的信息(如果你不关心的话,也可以跳过)。

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

请尽pipe所有的人告诉你无法检查客户端脚本技术。 如果目标技术具有httpfunction,则可以一直做,只需写出validation步骤即可。 这意味着字面上,检查JavaScript的方式是运行JavaScript。 如果JavaScript在浏览器端被禁用,则无法检查客户端是否支持JavaScript(比如Dillo使用默认configuration或其他)

更新:我已经开发这个脚本,因为我testing了一些例子在这里,似乎每个人都没有任何forms的testingcopypasting。 代码也在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 } 

这个解决scheme不需要更多的文件,只要运行一个支持Javascript的浏览器就可以迭代。 该值使用带有简单variables的GET传递回PHP,但任何人都可以将输出伪装成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;