簡體   English   中英

檢測NoScript(不是標簽,擴展名)

[英]Detecting NoScript (not the tag, the extension)

NoScript似乎阻止了javascript加載到我的網站上並阻止了對網站非常重要的登錄覆蓋。

有什么方法可以檢測到NoScript擴展並提醒用戶嗎?

編輯添加:看起來很多你沒有得到我,或者我可能不清楚。 我不是在談論<noscript>標簽,而是NoScript Firefox擴展,我如何檢測用戶是否已安裝和/或啟用它。

我使用的方法如下。

<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,它也不會像使用NoScript那樣使用NoScript。 如果你願意,你可以做自己的魔法來避免這個調用,但是最糟糕的情況是用戶代理被欺騙你仍然可以准確地指示是否正在使用NoScript。 更多信息在這里

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

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

noJS.php您可以編寫PHP腳本來呈現單個透明像素(PNG或GIF),並在該腳本中設置會話變量或存儲信息。

在HTML中使用<noscript>塊:

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

您可以使用以下代碼在普通頁面之前構建一個頁面:

<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秒后通過meta http-equiv="refresh"標簽轉發到http://www.yourpage.com?javascript=false ,該標簽無需Javascript即可使用。

作為后備,有一個鏈接用於在瀏覽器中禁用Javascript和其他轉發方法的用戶。

現在您有兩個單獨的頁面,您可以允許用戶登錄和使用Javacsript或不使用Javacsript。

筆記:

  • 這不是NoScript特有的(當通過其他方式禁用Javascript時,它將工作相同)。
  • 訪問您的頁面時,所有用戶都會有延遲。
  • 您的網址包含看起來有點難看的javascript參數。 您可以使用兩個不同的頁面而不是一個帶參數的頁面來隱藏它。

這就是為什么要制作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/

由於<noscript>內容僅在禁用JavaScript時顯示,因此您無法使用警報(因為它是, JavaScript )。 如果你需要注意網站需要JavaScript以便正常運行的事實,你將需要一些CSS。

一種可能性是在<noscript>中粘貼<link />標記,該標記加載包含規則的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>

據我所知,不可能專門檢測NoScript擴展。 我假設您要向擁有NoScript的用戶以及僅禁用JavaScript的用戶顯示自定義消息,但遺憾的是這是不可能的。

處理此問題的一種好方法是在<noscript>標記中顯示某種警告消息,說明“您必須啟用JavaScript才能使用此網站”。

安裝了NoScript的人將知道這意味着什么,並將相應地禁用它。

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的用戶進入您的頁面 - >執行JS並隱藏消息。
  • 用戶使用 NoScript的進入你的頁面- > 執行JS和消息將不被隱藏。

注意:我已經安裝了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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM