检查 PHP 是否启用了 JavaScript

IT技术 php javascript
2021-02-05 15:26:33

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

6个回答

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

<html>
<head>
 <noscript>
   This page needs JavaScript activated to work. 
   <style>div { display:none; }</style>
 </noscript>
</head>
<body>
<div>
my content
</div>
</body>
</html>
这不会告诉您有关脚本的信息,只是警告用户。这也是自动检查 javascript 的好方法。只需要刷新当前 phpsessid/session 的 url,你就会得到关于不存在的确认。无论您使用 javascript 还是不使用 javascript,检查它都很容易。
2021-03-17 15:26:33
<style>标签放在标签内是有效的 HTML5 <noscript>,只要<noscript>标签在<head>. w3.org/TR/html5/scripting-1.html#the-noscript-element
2021-03-26 15:26:33
您的解决方案既聪明又高效,但它没有验证 W3C 的 HTML5 标准:Element style not allowed as child of element noscript in this context. (Suppressing further errors from this subtree.)您可以保持这种简单性但仍然有效,使用<noscript> <div style="display:none"> </noscript> <span>my content</span> <noscript></div></noscript>.
2021-04-02 15:26:33
在@Chris Thompson 观看。
2021-04-04 15:26:33
如果您只需要在没有 JS 的情况下隐藏页面的一部分,这很好,但这不是 OP 所要求的。他专门询问了一种从 PHP 检查 JS 的方法。
2021-04-04 15:26:33

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

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

一个好的经验法则是创建页面并假设 javascript 已关闭。加载后,使用javascript“写入”到您的页面。这允许渐进增强。
2021-03-26 15:26:33
stackoverflow.com/a/29136452/2480481一种让 Javascript 告诉你它是的两步法。
2021-03-27 15:26:33
正如许多其他人指出的那样,这可能并不简单。我不明白为什么这是公认的答案。
2021-03-29 15:26:33

技术上没有,因为正如其他答案所说,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>标签,省力得多……

上帝。这实际上是我正在考虑的解决方案。你只需要检查它。克里斯,想想在客户端上使用 script noscript 指令做某事是不一样的,然后就知道并存储数据。
2021-03-28 15:26:33

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

<?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: /');
所以这意味着(如果我错了,请纠正我)每次用户第一次看到首页时,它都会“强制”重定向,以便重新加载页面,然后检查重新加载,如果是启用javascript?听起来就像是带着一头大象来杀死一只老鼠。但你是对的:它有效。在显示代码之前添加警告可能更安全。
2021-03-28 15:26:33
比我的干净多了,原理一样。
2021-03-28 15:26:33
似乎从另一个网页复制了代码,但不完整。@ Chris Thompson 有正确且简单的方法来做到这一点。
2021-04-10 15:26:33

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

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

说了这么多,估计也没啥用。您应该重新考虑从 PHP 检测 JS。如果您使用渐进增强则不需要它,这意味着 JS 只会向页面上已有的内容添加功能。

阅读该页面的评论实际上会告诉您,它会告诉您 HTTP 标头中的浏览器类型是否支持 JS,而不是是否已启用。
2021-03-13 15:26:33
@SublymeRick 我改写了答案,所以更明显的是它没有解决手头的问题,但它仍然是很好的信息。
2021-03-26 15:26:33
我讨厌刻薄,但你读过链接吗?有关于配置它的注意事项。我不建议使用它,顺便说一下,它在很多方面都不是真正可靠的。
2021-03-28 15:26:33
当您的整个应用程序使用客户端 JavaScript 代码(Ember 或 Angular)编写时,渐进式增强具有新的含义。我正在研究一种让这些类型的 Web 应用程序在没有 JavaScript 的情况下工作的方法,并且让所有内容都由服务器以及客户端代码呈现。
2021-03-29 15:26:33
最终用户是否需要配置他们的系统才能使用它?
2021-04-01 15:26:33