检查JavaScript是否启用了JavaScript

Wil*_*ill 50 javascript php

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

ozz*_*836 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>
Run Code Online (Sandbox Code Playgroud)

  • 您的解决方案既聪明又高效,但它不验证W3C的HTML5标准:`在此上下文中,元素样式不允许作为元素noscript的子元素.(抑制来自这个子树的更多错误.)`你可以保持这种简单但仍然有效,使用`<noscript> <div style ="display:none"> </ noscript> <span> my content </ span> <noscript > </ DIV> </ NOSCRIPT>`. (3认同)
  • 只要`<noscript>`标签位于`<head>`中,将`<style>`标签放在`<noscript>`标签内是有效的HTML5.请参阅https://www.w3.org/TR/html5/scripting-1.html#the-noscript-element (3认同)
  • 这不会告诉您有关脚本的信息,只是警告用户。这也是自动检查 javascript 的好方法。只需将 url 刷新到当前 phpsessid/session,您就会得到关于不存在的确认。无论您使用或不使用 javascript,检查它都很简单。 (2认同)
  • 如果您只需要在没有 JS 的情况下隐藏页面的一部分,那么这非常好,但这不是 OP 所要求的。他特意询问了一种从PHP检查JS的方法。 (2认同)

Wal*_*jad 47

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

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

  • 一个好的经验法则是创建页面并假设javascript已关闭.加载后,使用javascript"写"到您的页面.这允许逐步增强. (27认同)
  • 正如许多其他人所指出的那样,它可能并不简单.我不明白为什么THI是公认的答案. (7认同)

Chr*_*son 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>
Run Code Online (Sandbox Code Playgroud)

然后在myPage.php设置会话变量以指示客户端支持JS

<?php
   session_start();
   $_SESSION['js'] = true;
?>
Run Code Online (Sandbox Code Playgroud)

但实际上,只需使用<script></script><noscript></noscript>标签,更多,更少的努力......


小智 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';
}

?>
Run Code Online (Sandbox Code Playgroud)

//然后在get-javascript-status.php里面:

$_SESSION['js'] = isset($_GET['js'])&&$_GET['js']=="0" ? "0":"1";
header('location: /');
Run Code Online (Sandbox Code Playgroud)

  • 所以这意味着(如果我错了,请纠正我),每次用户第一次看到首页时,它"强制"重定向,以便重新加载页面,然后检查重新加载,如果是是否启用了javascript?这听起来好像它带来了一只大象来杀死一只老鼠.但你是对的:它有效.在显示代码之前添加警告可能更安全. (4认同)

Jua*_*des 6

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

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

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

  • 从该页面读取注释实际上告诉您它将告诉您HTTP头中的浏览器类型是否支持JS,而不是它是否已启用. (9认同)

小智 5

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

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


小智 5

在尝试之前,您必须禁用浏览器 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>
Run Code Online (Sandbox Code Playgroud)

在 script-disabled.html 中写一些东西

这是工作