Php 检查是否启用了Javascript

Php 检查是否启用了Javascript,php,javascript,jquery,zend-framework,Php,Javascript,Jquery,Zend Framework,有没有办法检查浏览器是否启用或支持Javascript?如果不支持,我想将用户重定向到一个用户友好的错误页面 我正在使用jQuery和PHP Zend框架。作为默认值,发送不带javascript的版本。在这里,您包含了一小段重定向到动态版本的javascript。这只会在启用js时执行。您可以为没有javascript的用户创建一个简单的“登录页”,并将javascript重定向添加到启用javascript的站点版本 大概是这样的: ... <html> ... <scri

有没有办法检查浏览器是否启用或支持Javascript?如果不支持,我想将用户重定向到一个用户友好的错误页面


我正在使用jQuery和PHP Zend框架。

作为默认值,发送不带javascript的版本。在这里,您包含了一小段重定向到动态版本的javascript。这只会在启用js时执行。

您可以为没有javascript的用户创建一个简单的“登录页”,并将javascript重定向添加到启用javascript的站点版本

大概是这样的:

...
<html>
...
<script type="text/javascript">
 window.location.replace("/hasjs");
</script>
。。。
...
window.location.replace(“/hasjs”);

如果脚本被禁用,这将重定向到错误页面。只要用错误页面的URL替换
error.html

如果页面没有JavaScript,则使用
标记包含元重定向


当连接到页面的浏览器没有JavaScript时,会调用标记。

是否启用JavaScript只能从浏览器的上下文中知道,因此您最好编写一些浏览器端代码,根据是否启用JavaScript设置标志。一种可能是做类似的事情

<noscript><img src="/javascript_disabled.php"></noscript>

作为另一种选择,您可以(尽管需要第二次页面访问)使用javascript设置cookie

如果cookie存在于服务器端(它们有javascript),则按正常方式呈现页面。在没有cookie的情况下,您可以使用
位置
重定向,或者呈现适当的[stripped down]模板以适应缺少javascript支持的情况

页面html

<script type="text/javascript">
  document.cookie = 'hasJS=true';
</script>

默认情况下,将用户带到错误页面,并在页面的部分执行javascript重定向。让重定向将用户推到真实页面

如果他们没有启用javascript,他们将不会被重定向,页面的其余部分(错误页面)将被加载。

小菜一碟

将整个Javascript页面包含在一个DIV中

覆盖第二个大小相同的DIV,其中包含非Javascript页面。为该DIV指定一个id和一个高z索引:

div id="hidejs" style="z-index: 200"
在第二个非JS DIV中,第一个代码是Javascript,它将此DIV的可见性设置为隐藏:

document.getElementById.("hidejs").style.visibility = "hidden";
没有启用Javascript?不会发生任何事情,他们将看到覆盖在上面的非Javascript页面

启用Javascript?覆盖的非Javascript页面将不可见,他们将看到底层Javascript页面


这还允许您将整个页面保存在一个文件中,从而使修改更容易,而不是试图为同一页面管理两个文件。

是。让您拥有最新的jQuery

Javascript:

$(function(){$('#jsEnabled2').html('yesit'))
PHP:

$js-“否”;
$jscheck='Javascript已启用:';
$jscheck.=''.$js';
打印$jscheck;

值得一提的是,我仍然发现创建一个带有“javascript增强功能”的单一页面比两个版本更好(而且更易于维护),但每个版本都有自己的版本。感谢您向未来需要它的人提出这一问题,比如myselfimho
noscript
可能只能放在身体中,但
meta
只能放在头部,因此,包含此内容的文档将无法验证。@marc,我认为您对HTML4的看法是正确的,但在HTML5中,这一点已经发生了变化。表示“在head元素中,
noscript
元素必须只包含
link
style
meta
元素”,因此
noscript
元素在
head
中都是允许的,而
head
中可以包含
meta
元素。为什么会有1秒的延迟?这是为了防止启用javascript的页面出现丑陋的闪现吗?这个方法对我来说非常有效。我的主页上有两个js幻灯片,alt页面没有太大问题。所以我建造了它并添加了这个技巧,瞧!好建议+1是否希望用户在加载元重定向之前可能看到错误页面?否,我的部分响应被StackOverflow(我写了>headAh ok,你应该更新你的答案,但我将删除下一票。编辑|我只能在编辑完你的答案后删除下一票。包括“整个”页面上的jQuery库仅仅用于此功能有点“过度杀戮”你不觉得吗?这只是一个小测试的+30K B。我想你想再看看你发布的代码。它不仅不起作用,还有语法错误。发布答案时请小心。测试你的代码,并确保在提交之前校对:)好的努力人。。。一个文件中的整个页面很好,但是如果它需要复制整个文件,我宁愿有一个单独的文件,因为上面你不必为非JS创建一个副本,你可以添加一个类,隐藏依赖JS的元素或为其提供不同的样式。然后JS将在页面加载时简单地删除该类。任何东西都比因为没有启用JS而不允许访问其他页面的臭页面要好。它只适用于以下情况:
if (isset($_COOKIE['hasJS'])){
  // normal page render
}else{
  header('Location: http://mysite.com/index-nojs.php');
}
div id="hidejs" style="z-index: 200"
document.getElementById.("hidejs").style.visibility = "hidden";