перенаправить на страницу, если браузер не поддерживает JavaScript в asp.net MVC - PullRequest
2 голосов
/ 05 февраля 2010

Как проверить, поддерживает ли браузер javascript?

Мне нужно перенаправить пользователей на страницу уведомлений, если браузер пользователя не поддерживает javascript.Как я могу сделать это в моем приложении asp.net mvc (C #)?

Какой лучший способ справиться с этим в asp.net mvc?

HTML, который я тестировал:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <title>Stack Overflow</title>
    <link rel="stylesheet" href="http://sstatic.net/so/all.css?v=6230">
</head>
<body>
    <noscript>
        <div id="noscript-warning">Stack Overflow works best with JavaScript enabled<img src="http://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"></div>
    </noscript>        
</body>
</html>

Ответы [ 7 ]

6 голосов
/ 05 февраля 2010

Ничего себе на все -1. Хм, ну ... это может быть недопустимо, но взлом meta -in- noscript (как все уже опубликовали и за него проголосовали) действительно - это единственный способ сделать то, что вы хочу. Но:

Мне нужно перенаправить пользователей на страницу уведомлений, если браузер пользователя не поддерживает javascript

Я думаю, что вы хотите не то, что вам нужно 1012 *. Перенаправление без JS ужасно для удобства использования / доступности. Пожалуйста, не делай этого.

Вместо этого рассмотрите подход, подобный SO: держите пользователя на той же странице, но просто включите уведомление на странице о том, что сценарии недоступны:

<noscript>
    <div id="noscript-warning">Stack Overflow works best with JavaScript enabled</div>
</noscript>

Вы можете использовать CSS, чтобы сделать его большим и красным и отображаться поверх всей остальной части страницы, если это необходимо.

Вы также можете быть более конкретным. Часто вам нужен не только JavaScript, но и поддержка определенных функций сценариев, которые доступны не везде. Например, IEMobile (до 8) имеет JavaScript, но имеет задержку поддержки DOM, которая останавливает запуск большинства современных сценариев. Или вы можете полагаться на интерфейсы, связанные с HTML5, которые еще не везде. В этом случае вы можете прослушать клиентскую часть и установить видимость уведомления вручную:

<head>
    <style type="text/javascript">
        #scriptwarning {
            position: absolute; z-index: 9;
            top: 25%; left: 25%; width:50%; height: 50%;
            color: red; background: white;
            border: dashed red 1px;
        }
        body.jsok #scriptwarning { display: none; }
    </style>
</head><body>
    <script type="text/javascript">
        // Sniff capabilities in whatever way is necessary
        //
        if ('featureWeWantToUse' in window) {
            document.body.className= 'jsok';
        }
    </script>
    <div id="scriptwarning">
        JavaScript is disabled, or too rubbish on your browser to do what we want.
        See the <a href="browsersupport.html">supported browsers</a> page for more information.
    </div>
</body>
3 голосов
/ 05 февраля 2010

Нет способа обнаружить его на стороне сервера, я не знаю ни одного браузера, который бы сообщал серверу в заголовках, которые он отправляет, свой статус поддержки javascript. Вы должны иметь возможность использовать метаобновление внутри тега noscript, хотя:

<noscript>
    <meta http-equiv="refresh" content="0; URL=no_javascript.asp">
</noscript>

В качестве альтернативы, я бы рекомендовал делать то, что делает SO - отображать большой красный баннер в верхней части страницы, говорящий о том, что JavaScript необходим или заставляет страницу работать лучше.

<noscript>
    <div id="noscript">Enable JavaScript to get the most out of this site!</div>
<noscript>
2 голосов
/ 06 декабря 2011

В качестве альтернативы вы можете использовать тег noscript, чтобы скрыть содержимое страницы и отобразить предупреждение о том, что странице требуется JavaScript. Вы можете сделать что-то вроде этого:

<noscript>
  <style> 
     #id_of_content_to_hide { display:none; }
  </style>
  <p>
     This page requires javascript.
  </p>
</noscript>
1 голос
/ 05 февраля 2010

Это очень легко перевернуть с ног на голову.

Начните с страницы, предназначенной для людей, у которых нет JavaScript, затем используйте JavaScript для перенаправления на версию, требующую JavaScript.

<script type="text/javascript">
    document.location = "JSVersion.html";
</script>
0 голосов
/ 05 февраля 2010

Очень хакерский подход:

  1. Установить cookie с помощью JavaScript

  2. Используйте метаобновление для перенаправления (это наихудший из возможных способов перенаправления, но единственный, который произойдет после запуска JS, если JS доступен, и все еще работает, если JS недоступен)

  3. Проверка наличия файла cookie на перенаправляемой странице и выдача 302 либо на страницу с JS-подарком, либо на страницу с отсутствием JS.

Это не получится, если файлы cookie или JavaScript были отключены или не поддерживаются.

Если вы отступите назад и попытаетесь решить проблему «У некоторых пользователей нет JS» должным образом (вместо того, чтобы перейти непосредственно к «Попытаться обнаружить пользователей без JS»), используйте прогрессивное улучшение и следуйте правилу 2 .

0 голосов
/ 05 февраля 2010

Я не совсем уверен, как вы хотите перенаправить, но вы можете использовать тег <meta> для перенаправления на другую страницу: <meta http-equiv="refresh" content="2;URL=page.aspx" />

URL может быть создан <% = Url.Action (...)%>

0 голосов
/ 05 февраля 2010

Поместите мета-обновление в тег noscript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...