检测NoScript(不是标签,扩展名)

时间:2014-01-12 08:28:42

标签: javascript firefox noscript

NoScript似乎阻止javascript加载到我的网站上并阻止登录覆盖,这对网站非常重要。

我有什么方法可以检测到NoScript扩展并提醒用户?

编辑添加:看起来很多人没有得到我,或者我可能不清楚。我不是在讨论<noscript>标签,而是NoScript Firefox扩展,我如何检测用户是否已安装和/或启用它。

8 个答案:

答案 0 :(得分:20)

我使用的方法如下。

<head>
<style>
  .noscript-error {
    background-image: url(noscript.php)
  }
</style>
<style>
  @import url(chrome://noscript/skin/browser.css);
</style>
</head>
<body>
  <div class="noscript-error">If noscript is NOT installed (and enabled) then Firefox will make a request for noscript.php.
  </div>
</body>

它非常不言自明。 这可以确认NoScript是否正在使用中。 您只需要在noscript.php中执行任何操作即可在会话中设置禁用NoScript的内容。

注意:在其他浏览器中noscript.php始终被调用,即使使用其他浏览器并调用noscript,这也不是问题.php,它不会像使用Firefox一样使用NoScript。 如果你愿意,你可以做自己的魔法来避免这个调用,但是最糟糕的情况是用户代理被欺骗你仍然有一个关于是否使用NoScript的准确指示。 More info here

此外,如果您只想知道服务器端是否启用了JavaScript,您可以使用

<noscript>
    <img src="noJS.php" alt="JavaScript is disabled" />
</noscript>

noJS.php中,您可以编写PHP script to render a single transparent pixel (PNG or GIF)并在该脚本中设置会话变量,或存储信息。

答案 1 :(得分:16)

在HTML中使用<noscript>块:

<noscript>
This site requires Javascript. Please enable Javascript in your browser for this site.
</noscript>

答案 2 :(得分:2)

您可以使用以下代码在普通页面之前构建一个页面:

<html>
    <head>
        <meta http-equiv="refresh" content="3; URL=http://www.yourpage.com?javascript=false">
        <script type="text/javascript">
            location.href = "http://www.yourpage.com?javascript=true";
        </script>
    </head>
    <body>
        <span>Please wait while the page is loading ...</span>
        <noscript>If nothing happens follow this <a href="http://www.yourpage.com?javascript=false">link</a>.</noscript>
    </body>
</html>

如果用户启用了Javascript,他会立即转发到http://www.yourpage.com?javascript=true,并且您知道他已启用了javascript。

如果Javascript被停用,则用户将在3秒后被http://www.yourpage.com?javascript=false标记转发至meta http-equiv="refresh",该标记无需使用Javascript。

作为后备,有一个链接供在浏览器中禁用Javascript和其他转发方法的用户使用。

现在您有两个单独的页面,您可以允许用户登录和使用或不使用Javacsript。

备注:

  • 这不是特定于NoScript(当通过其他方式禁用Javascript时,它将起作用。)
  • 访问您的信息页时,所有用户都会有延迟。
  • 您的网址包含看起来有点难看的javascript参数。您可以使用两个不同的页面而不是一个带参数的页面来隐藏它。

答案 3 :(得分:2)

这就是制作NoScript的原因,以阻止网站上的任何JavaScript代码。 警报也适用于js,因此您需要一些解决方法来通知用户。如果启用了JS,您可以简单地设置没有JS的模态警告窗口并将其删除。

<强> HTML

<div id="js-disabled-warning">
    <div class="message">
        <p>You're using this site with javascript disabled (set by manually or with a browser extension like NoScript)!</p>
        <p>Javascript is essential for using this site. Please enable it!</p>
        <p>Here you can get some help: <a href="http://www.enable-javascript.com" target="_blank">http://www.enable-javascript.com</a></p>
    </div>
</div>

<div class="site-content">
    <p>Here comes your site content!</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Deleniti inventore velit sint aspernatur nemo quasi in officia doloribus dolores deserunt nostrum quas. Excepturi recusandae eum libero sint necessitatibus corporis id.</p>
</div>

<强> CSS

#js-disabled-warning {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    background: rgba(0,0,0,.5);
}

#js-disabled-warning .message {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    display: table;
    width: 30%;
    background: #bada55;
    padding: 20px;
    border-radius: 5px;
}

和JS删除消息

(function() {
    var alert_modal = document.getElementById('js-disabled-warning');
    alert_modal.parentNode.removeChild(alert_modal);
})();

启用插件后,此脚本将无法运行并显示您的消息。

这里有一个小提琴:http://jsfiddle.net/X7q9F/

答案 4 :(得分:0)

由于<noscript>内容仅在禁用JavaScript时显示,因此无法使用提醒(因为它是, JavaScript )。如果你需要注意网站需要JavaScript以便正常运行的事实,你将需要一些CSS。

一种可能性是在<link />中添加<noscript>标记,该标记加载包含规则的CSS文件以隐藏除错误消息之外的所有内容。一个非常简单的示例(仅使用嵌入的<style>标记):

<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
    </head>
    <body>
        <div class="container"> 
            <noscript>
                <style>
                    .noscript { display:none; }
                </style>
                <div class="alert alert-danger">
                    <b>Sorry!</b> This site requires JavaScript. Please enable it in your browser.
                </div>
            </noscript>
            <div class="noscript">
            <p>
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris id blandit lacus. Nulla tempus ornare arcu vel iaculis. Duis sit amet interdum enim, sed molestie massa. Proin in leo nunc. Nullam justo felis, consectetur sit amet sapien ut, feugiat tincidunt arcu. Ut dignissim, nisl ut placerat interdum, odio nibh euismod ipsum, nec placerat est est tempor erat. Curabitur in ligula sed enim eleifend fermentum. Duis sit amet adipiscing eros. Mauris lacinia ut tortor sed accumsan.
            </p>
            <p>
            Curabitur libero risus, sagittis sed urna ut, molestie fermentum enim. Donec fringilla pharetra neque sed ullamcorper. Phasellus ante lacus, rutrum eu ligula eu, mattis tempor metus. In tincidunt arcu non enim rutrum, at fringilla eros mattis. Nulla facilisi. Mauris eu elit id tellus ornare sollicitudin quis nec lacus. Curabitur aliquam porttitor enim, pretium vestibulum felis tristique id. Donec dictum congue turpis, sit amet dictum purus placerat quis.
            </p>
            <p>
            Curabitur quis nulla consequat, adipiscing quam eget, vulputate nulla. Pellentesque elit ante, sagittis vitae magna id, adipiscing aliquet purus. Phasellus eros tellus, eleifend sit amet tellus vel, porta ultrices elit. Vestibulum tincidunt, ligula in gravida mattis, nulla mi blandit nulla, hendrerit sodales erat mauris sit amet nulla. Morbi congue imperdiet mi, vitae vulputate neque euismod a. Pellentesque consectetur, diam vel feugiat elementum, arcu enim faucibus risus, ut tempor leo magna sit amet augue. Donec justo nisi, lacinia et risus at, dapibus ultrices risus. In consequat felis id lectus dictum ornare. Proin egestas tortor urna, sed vehicula sapien gravida vitae.
            </p>
            </div>
        </div>
    </body>
</html>

答案 5 :(得分:0)

据我所知,无法专门检测NoScript扩展。我假设您希望向拥有NoScript的用户以及仅禁用JavaScript的用户显示自定义消息,但遗憾的是这不可能。

处理此问题的一种好方法是在<noscript>标记中显示某种警告消息,说明“您必须启用JavaScript才能使用此网站”。

安装了NoScript的人会知道这意味着什么,并会相应地禁用它。

答案 6 :(得分:0)

NoScript会阻止所有JavaScript。因此,只需使用JS隐藏警告消息,如果它仍然存在,则启用NoScript(或通常禁用JS)。

<html>
    <head>
        <title>test</test>
    </head>
    <body>
        <div id="noscript">Warning! You have disabled JS or you're using NoScript which will break this site! Please active JS or deactivate NoScript to continue.</div>
        <div id="content">
            ...
        </div>
        <script type="text/javascript">
            document.getElementById('noscript').style.display = 'none';
        </script>
    </body>
</html>
  • 用户没有 NoScript进入您的页面 - &gt;执行JS并隐藏消息。
  • 用户 NoScript进入您的网页 - &gt; JS 执行,消息 >不会被隐藏。

答案 7 :(得分:0)

注意:我已经安装了Firefox NoScript扩展程序来测试此解决方案,它确实可以正常工作。

Noscript主要是一个安全插件,因此检测或覆盖Noscript不是一种选择。

由于您在该场景中没有Javascript,因此您需要依赖静态HTML / CSS通知用户然后使用javascript删除通知。

<html>
<head>
  <title>noscript detect</title>
</head>

<body>
  <div id="noJavascript">
    Your browser does not have javascript enabled. This site
    requires javascript to operate properly. Please enable
    javascript.
  </div>
  <script type="text/javascript">
   var noJavascript = document.getElementById("noJavascript");
   noJavascript.parentNode.removeChild(noJavascript);
  </script>
</body>
</html>