【问题标题】:PHP & <noscript> combination to detect enabled JavaScript in browserPHP & <noscript> 组合检测浏览器中启用的 JavaScript
【发布时间】:2013-01-02 12:04:52
【问题描述】:

这是正确的吗?如果不是正确的语法是什么

我是 php 新手,因此尝试学习。

    <?php
    // Check browser for JavaScript support

        $jsSupport='true'; ?>

        <noscript><?php $jsSupport='false'; ?></noscript>

        <?php
        if ($jsSupport == 'false') {

        include ('no-script-layout.php');

        } else {

        include ('regular-layout.php');

        }

     ?>

或者有没有更好的方法来处理这个问题?

【问题讨论】:

  • 您可能应该阅读更多关于 PHP、HTTP 和 HTML 工作原理的信息...
  • 不用大喊,我们可以听到你的声音;-)
  • 在 IF 语句中,首先使用 == 而不是 =
  • @dave 抱歉,我是这个地方的新手,因此学习缓慢。顺便问一下,您对我的问题有解决方案吗?
  • OP,请阅读 Trimbitas 对此问题的解决方案。它应该可以工作。

标签: php javascript noscript


【解决方案1】:

&lt;noscript&gt;标签

您可以使用noscript 标记向禁用了javascript 的浏览器显示内容或将它们重定向到另一个页面(例如nojs-version.php)。

<!-- Redirect to another page (for no-js support) (place it in your <head>) -->
<noscript><meta http-equiv="refresh" content="0;url=nojs-version.php"></noscript>    

<!-- Show a message -->
<noscript>You don't have javascript enabled! Please download Google Chrome!</noscript>

现代化

处理 javascript 检测(和功能)的更好方法是使用 Modernizr:http://modernizr.com

查看这个 SO 问题:What is the purpose of the HTML "no-js" class?

一个基本的例子(没有 Modernizr)

您可以在页面加载时将no-js 类添加到您的&lt;body&gt; 标记中。然后,当页面加载时,如果启用了 javascript,您可以将 no-js 替换为 js,如下所示:

// When the DOM is ready & loaded, do this..
$(document).ready(function(){
    // Remove the `no-js` and add the `js` (because JS is enabled (we're using it!)
    $('body').removeClass('no-js').addClass('js');

    // Assign it to a var so you don't traverse the DOM unnecessarily.
    var useJS = $('body').hasClass('js');
    if(useJS){
        // JS Enabled
    }
});

上面的代码是modernizr如何工作的一个非常基本的例子。我强烈建议只使用它。

Check out Modernizr

【讨论】:

  • 你也可以添加这个来代替上面的jquery方法:(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);
【解决方案2】:

要做到这一点(如果你真的需要从 PHP 知道用户是否启用了 JS):

<script>
// AJAX call to your PHP script to tell it that JS is enabled
</script>

【讨论】:

  • 或者,完全不使用 AJAX,您可以让 JavaScript 设置一个 cookie 来告诉 PHP JavaScript 已启用。
  • 是的,JS/AJAX 可以在不重新加载页面的情况下进行进一步处理时进行回调。但是 cookie 的想法似乎也不错。
  • if(getCookie('javaScriptEnabled')) { /* do other stuff here */ }:P
  • 机器人应该无关紧要,因为您的网站应该被设计成可以在没有客户端脚本的情况下导航 - 脚本只是为了提供更丰富的用户界面,机器人并不关心。我个人不会为了容纳偏执的人而为自己多做 10 倍的工作。 YMMV。
  • 让 NoScript 信任 Facebook 和 SO —— 全部完成。乍一看,NoScript 似乎很愚蠢,但事实并非如此。我能想到很多次我的浏览器被恶意脚本接管了。
【解决方案3】:

不,这是不正确的。所有代码都被解释了,为什么你使用字符串文字而不是实际的布尔值?更不用说,您在 if 语句中使用的是赋值运算符而不是比较运算符。

【讨论】:

    【解决方案4】:

    它不起作用,因为&lt;noscript&gt;浏览器中引发了一种行为,而您正在检查您的条件服务器端。

    【讨论】:

    • 这不是语法问题,而是理解网络如何工作的问题。寻找一本不错且全面的资源/书籍,并从中学习^^
    【解决方案5】:

    如果 JavaScript 被禁用,这将非常有效

    HTML

    <noscript>
             <div id="noscript-warning">This Application works best with JavaScript enabled</div>
            </noscript>   
    

    CSS

    <style>
    #noscript-warning {
    font-family: sans-serif;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    z-index: 101;
    text-align: center;
    font-weight: bold;
    font-size: 120%;
    color: #fff;
    background-color: #ae0000;
    padding: 5px 0 5px 0;
    </style>
    

    【讨论】:

      【解决方案6】:

      它不会起作用,因为 php 是一个服务器端预处理器,除了浏览器的原始请求中提供的信息之外,它无法了解用户浏览器的任何信息,其中不包含关于其当前脚本功能的任何信息。

      基本上,如果您想在简单的noscript 标签之外拥有丰富的内容——它们只能添加非脚本内容,不能隐藏脚本内容——你必须:

      1. 将所有内容(包括纯文本和 javascript 版本)发送到 浏览器。
      2. 将所有非脚本版本的 html 放在 divspan 标记中,并带有 class="nocript"
      3. 将 html 的所有脚本版本放在divspan 标记中,并带有class="script"
      4. 设置css以div.noscript{display:block}span.noscript{display:inline}.script{display:none}开头。
      5. 让你的 javascript 用class="noscript"element.style.display='none' 隐藏每个元素,用class="script"element.style.display='block' 显示每个div 并用class="script"element.style.display='inline' 显示每个span

      您还必须考虑到浏览器是一个特别恶劣的编程环境,因为用户或任何插件可以随时执行任何操作,例如禁用 javascript。因此,您必须仔细检查浏览器在您的 PHP 代码中发送的所有内容(无论是通过表单还是 AJAX),以确保其完整且没有损坏。

      【讨论】:

        【解决方案7】:

        我通过在 noscript 标记内包装一个 HTML 注释标记让它为我工作:

        <noscript><!-- </noscript>
        <?php 
         $a = 42;
         echo $a;
        ?> 
        <noscript> --> </noscript>
        

        我对此表示怀疑......但它有效,所以......如果有一些奇怪的情况它不起作用,请告诉我......希望这对您的问题有所帮助:)

        【讨论】:

        • 那行不通。 PHP 总是 运行。只有 PHP 的输出由 noscript 规则处理。
        【解决方案8】:

        我认为你可以在你的脚本中这样做,在 index.php 脚本中,写下这段代码:

        <?php
        
          //true will be returned only if javascript is not enabled 
          $JSEnabled = "<noscript>true</noscript>"; 
        
          //then you can do echo $JSEnabled to see the result yourself 
        
          //in a condition statement ...
          if($JSEnabled) {
        
                  // ... code for JS Enabled 
        
          } else {
        
                  // ... code not JS Disabled 
        
          }
        

        更新:

           $js = null;
           $js = (boolean) '<noscript>false</noscript>';  
           //the noscript text : false is shown when no js support detected in your browser. this value will be converted to a boolean value for testing purpose.
        
           if($js) {                                      
           //if $js gets the no script text , that means that the browser is not supporting the js, so this line will check if $js is set to false , the else statement is fired , otherwise the if statement is fired
            echo 'Your javascript is enabled<br>';
           } else {
            echo 'Your javascript is disabled<br>';
           }
        

        【讨论】:

          【解决方案9】:

          你可以用 jQuery 和 CSS 做到这一点:

          <body style='display: none;'>
          <!--- Content goes here --->
          </body>
          <script>
          //jQuery
          $("body").css("display","block");
          //Pure JavaScript
          document.body.style.display="block";
          </script>
          

          【讨论】:

            【解决方案10】:

            怎么样?

            <noscript>
            <?php 
            //do the include thing right here 
            $a=1;
            ?>
            </noscript>
            <?php
            if(isset($a)){
            //do nothing
            }else {
            //add the include u want 
            };
            <?
            

            【讨论】:

            • 老兄,如果你没有注意到它不是关于 1 值,它是关于是否是 $a set ,我们甚至不必将值设置为 1 ,它是关于设置它或不设置 ($a)
            • 好的..然后我修改我的评论..你的 $a 总是设置:) 请了解更多关于 js/php 然后尝试给出答案。
            • 如果启用了 javascript 则不会发生
            • Yes .. noscript 表示不会在其中运行 Javascript,PHP 是一门独立的语言。 Javascript 是客户端,PHP 是服务器端。
            猜你喜欢
            • 2011-09-14
            • 2010-09-21
            • 1970-01-01
            • 2013-03-03
            • 2013-04-29
            • 2013-07-29
            • 2011-01-24
            • 2011-05-30
            相关资源
            最近更新 更多