【问题标题】:Check whether Javascript is enabled检查是否启用了Javascript
【发布时间】:2011-07-13 18:16:05
【问题描述】:

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

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

【问题讨论】:

  • 我仍然觉得用“javascript 增强”创建一个页面是比两个版本更好的解决方案(并且更容易维护),但对每个人来说都是他/她自己的。
  • 感谢您为像我这样的未来需要它的人提出这个问题

标签: php javascript jquery zend-framework


【解决方案1】:
<noscript><meta http-equiv="refresh" content="1;url=error.html"></noscript>

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

【讨论】:

  • imho noscript 可能只放在正文中,但 meta 只是放在头部,因此包含此内容的文档将无法验证。
  • @marc,我认为您对 HTML 4 的看法是正确的,但在 HTML 5 下发生了变化。 w3.org/TR/html5/scripting-1.html#the-noscript-element 表示“在头元素中,...noscript 元素必须仅包含 link、style 和 meta 元素”,因此 noscript 元素在 head 和何时都允许使用在head 中可以包含meta 元素。
  • 为什么会有 1 秒的延迟?这是为了防止启用 javascript 的页面出现丑陋的闪现吗?
  • 这个方法对我很有效。我的主页上有两个 js 幻灯片放映,而 alt 页面并不太麻烦。所以我构建了它并添加了这个技巧,瞧!不错的建议。 +1
【解决方案2】:

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

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

页面html

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

页面 php

if (isset($_COOKIE['hasJS'])){
  // normal page render
}else{
  header('Location: http://mysite.com/index-nojs.php');
}

【讨论】:

    【解决方案3】:

    只有在浏览器的上下文中才能知道是否启用了 javascript,因此您能做的最好的事情就是编写一些浏览器端代码来根据是否启用 javascript 设置一个标志。一种可能性是做类似的事情

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

    和

    // contents of javascript_disabled.php
    $_SESSION['javascript_disabled'] = 1;
    

    【讨论】:

    • 它可以工作,但仅限于此:&lt;noscript&gt;&lt;link href="php/javascript_disabled.php"&gt;&lt;/noscript&gt;
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      您可以为没有 javascript 的用户制作一个简单的“登陆页面”,并添加一个 javascript 重定向到启用 javascript 的网站版本。

      类似这样的:

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

      【讨论】:

        【解决方案6】:

        小菜一碟!

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

        覆盖第二个相同大小的 DIV,其中包含您的非 Javascript 页面。给那个 DIV 一个 id 和一个高 z-index:

        div id="hidejs" style="z-index: 200"
        

        在第二个非 JS DIV 中,让您的第一个代码是 Javascript,将这个 DIV 的可见性设置为隐藏:

        document.getElementById.("hidejs").style.visibility = "hidden";
        

        没有启用 Javascript?什么都不会发生,他们会看到覆盖的非 Javascript 页面。

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

        这还可以让您将整个页面保存在一个文件中,从而更轻松地进行修改,而不是尝试为同一页面管理两个文件。

        【讨论】:

        • 干得好人...一个文件中的整个页面很好,但如果它需要复制整个臭的东西,我宁愿只拥有一个单独的文件,如上所述
        • 你不必为非 JS 重复,你可以添加一个类来隐藏或为依赖 JS 的元素提供不同的样式。然后,JS 会在页面加载时简单地删除该类。任何东西都比一个臭气熏天的页面要好,因为你没有启用 JS,甚至不允许你访问其他页面。
        【解决方案7】:

        如果页面没有 JavaScript,请使用 &lt;noscript&gt; 标记来包含元重定向。

        &lt;noscript&gt; 标签在连接到页面的浏览器没有 JavaScript 时被调用。

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

          • 所以您希望用户在加载元重定向之前可能会看到错误页面?
          • 不,我的部分回复被 StackOverflow 吃掉了(我写了>head
          • 啊,好吧,你应该更新你的答案,但我会删除反对票。编辑|编辑您的答案后,我只能删除反对票。
          【解决方案9】:

          是的。让你拥有最新的jQuery。

          Javascript:

          $(function(){ $('#jsEnabled2').html('Yes it is') }) 
          

          PHP:

          $js - 'No'; 
          $jscheck = 'Javascript Enabled: '; 
          $jscheck .= '<span id="jsEnabled">'.$js.'</span>';
          print $jscheck;
          

          【讨论】:

          • 在你的页面上包含“整个”jQuery 库只是为了实现这个功能有点“过度杀伤”,你不觉得吗?仅针对这一项小测试,这就是 +30K B。
          • 我想你想看看你再次发布的代码。它不仅不起作用,而且还有语法错误。发布答案时请小心。测试您的代码并确保在提交之前进行校对:)
          猜你喜欢
          • 2011-05-26
          • 2016-02-29
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-07
          相关资源
          最近更新 更多