Обнаружение NoScript (не тега, расширение)
NoScript, похоже, блокирует загрузку javascript на моем сайте и блокирует накладки входа, которые очень важны для сайта.
Есть ли способ обнаружить расширение NoScript и предупредить пользователей?
Отредактировано для добавления: Похоже, что многие из вас меня не доставили, или, может быть, я не был ясен. Я не говорю о теге <noscript>
, но расширении NoScript Firefox, как бы определить, был ли он установлен и/или включен.
Ответы
Ответ 1
Используемый мной метод выглядит следующим образом.
<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 как это только для Firefox.
Вы можете сделать свою собственную магию, чтобы избежать этого вызова, если хотите, но худший крайний случай, когда пользовательский агент подделывается, вы все равно будете иметь точный индикатор того, используется ли NoScript.
Дополнительная информация здесь
Также, если вы просто хотите знать, на стороне сервера, включен ли JavaScript, вы можете использовать
<noscript>
<img src="noJS.php" alt="JavaScript is disabled" />
</noscript>
В noJS.php
вы можете написать PHP script для рендеринга одного прозрачного пикселя (PNG или GIF) и внутри этого script установить переменную сеанса, или сохранить информацию.
Ответ 2
Использовать блок <noscript>
в вашем HTML:
<noscript>
This site requires Javascript. Please enable Javascript in your browser for this site.
</noscript>
Ответ 3
Вы можете создать одну страницу перед своей обычной страницей со следующим кодом:
<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 отключен, пользователь будет перенаправлен на http://www.yourpage.com?javascript=false
через 3 секунды тегом meta http-equiv="refresh"
, который работает без Javascript.
В качестве резервной ссылки есть ссылка для пользователей, у которых в браузере отключены Javascript и другие методы пересылки.
Теперь у вас есть две разделенные страницы, где вы можете разрешить пользователю входить в систему и работать с Javacsript или без него.
Примечания:
- Это не относится к NoScript (он будет работать одинаково, если Javascript отключен другими способами).
- У всех пользователей будет задержка при доступе к вашей странице.
- В ваших URL-адресах содержится параметр javascript, который выглядит как уродливый. Вы можете использовать две разные страницы вместо одной страницы с параметрами, чтобы скрыть это.
Ответ 4
Вот почему NoScript был сделан, чтобы заблокировать любой код javascript на сайтах.
Alert работает также с помощью 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);
})();
Если аддон включен, этот script не будет запущен и ваше сообщение будет показано.
Вот сценарий для него: http://jsfiddle.net/X7q9F/
Ответ 5
Поскольку содержимое <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>
Ответ 6
Насколько я знаю, невозможно обнаружить расширение NoScript. Я предполагаю, что вы хотите отображать настроенные сообщения пользователям, у которых есть NoScript, и пользователям, у которых просто отключен JavaScript, но это, к сожалению, невозможно.
Хороший способ справиться с этим - отобразить какое-то предупреждение в тегах <noscript>
, говорящее что-то вроде строк "Вы должны включить JavaScript для использования этого сайта".
Люди, у которых установлен NoScript, будут знать, что это значит, и соответственно отключат его.
Ответ 7
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 не и сообщение не будет.
Ответ 8
ПРИМЕЧАНИЕ. Я установил расширение 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>