Как получить хэш Url ( # ) со стороны сервера


Я знаю, что на стороне клиента (javascript) вы можете использовать windows.местоположение.хэш, но не удалось найти в любом случае для доступа со стороны сервера.

6 122

6 ответов:

у нас была ситуация, когда нам нужно было сохранить хэш URL через ASP.Net задние части столба. Поскольку браузер не отправляет хэш на сервер по умолчанию, единственный способ сделать это-использовать некоторый Javascript:

  1. когда форма отправляется, возьмите хэш (window.location.hash) и сохраните его в скрытом поле ввода на стороне сервера поместите это в DIV с идентификатором"urlhash " Так что мы можем легко найти его позже.

  2. на сервере вы можете использовать это значение, если вам нужно что-то с ним сделать. Вы даже можете изменить его, если вам нужно.

  3. на странице load на клиенте, проверьте значение этого скрытого поля. Вы захотите найти его по DIV, в котором он содержится, поскольку автоматически сгенерированный идентификатор не будет известен. Да ,вы могли бы сделать некоторые хитрости здесь.ClientID но мы обнаружили, что проще просто использовать оболочку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в a общая мода.

  4. если скрытое поле ввода имеет допустимое значение, установите его в качестве хэша URL (window.location.hash again) и/или выполнять другие действия.

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

прежде чем предоставить:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});

на странице нагрузка:

var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}

IsHashValid() можете проверить на "undefined" или другие вещи, которые вы не хотите обрабатывать.

кроме того, убедитесь, что вы используете $(document).ready() правильно, конечно.

RFC 2396 4.1:

когда ссылка URI используется для выполнения действия по извлечению идентифицированный ресурс, необязательный идентификатор фрагмента, отделенный от URI по символу crosshatch ( " # " ), состоит из дополнительных справочная информация для интерпретации агентом пользователя после операция извлечения успешно завершена. Как таковой она не является часть URI, но часто используется в соединение с URI.

(курсив)

Это потому, что браузер не передает на сервер, к сожалению.

вероятно, единственный выбор-прочитать его на стороне клиента и передать его вручную на сервер (GET/POST/AJAX). С уважением Артур

вы также можете увидеть, как играть с кнопкой Назад и историей браузера в Malcan

просто чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть фрагмент на GET/POST и на самом деле хотите знать, как получить доступ к этой части объекта URI, который у вас есть в вашем серверном коде, он находится под Uri.Фрагмент ( MSDN docs).

возможное решение для запросов GET:

новый формат ссылки:http://example.com/yourDirectory?hash=video01

вызовите эту функцию в верхней части контроллера или http://example.com/yourDirectory/index.php:

function redirect()
{
    if (!empty($_GET['hash'])) {
        /** Sanitize & Validate $_GET['hash']
               If valid return string
               If invalid: return empty or false
        ******************************************************/
        $validHash = sanitizeAndValidateHashFunction($_GET['hash']);
        if (!empty($validHash)) {
            $url = './#' . $validHash;
        } else {
            $url = '/your404page.php';
        }
        header("Location: $url");
    }
}