有没有办法检查JavaScript是否启用了PHP?如果是这样,怎么样?
答案 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启用启用设置,你可以试试这个(我不知道如果它有效):
<?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: <span id="jsEnabled">'.$js.'</span>';
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;