Я знаю, що на стороні клієнта (javascript) ви можете використовувати windows.location.hash, але все-таки не змогли знайти доступ з боку сервера.
Я знаю, що на стороні клієнта (javascript) ви можете використовувати windows.location.hash, але все-таки не змогли знайти доступ з боку сервера.
Відповіді:
У нас виникла ситуація, коли нам потрібно було зберігати хеш URL-адрес у всіх спинках публікацій ASP.Net. Оскільки браузер не надсилає хеш на сервер за замовчуванням, єдиний спосіб зробити це - використовувати деякий Javascript:
Коли форма подає, візьміть хеш ( window.location.hash
) та збережіть його у прихованому вхідному полі на стороні сервера Помістіть це у DIV з ідентифікатором " urlhash
", щоб ми могли його легко знайти пізніше.
На сервері ви можете використовувати це значення, якщо вам потрібно щось зробити з ним. Ви навіть можете змінити це, якщо вам потрібно.
На завантаженні сторінки на клієнта перевірте значення цього прихованого поля. Ви захочете знайти його за допомогою DIV, в якому він міститься, оскільки автоматично згенерований ідентифікатор не буде відомий. Так, ви можете зробити деякі хитрощі тут .ClientID, але ми виявили, що простіше використовувати оболонку DIV, оскільки це дозволяє всім Javascript жити у зовнішньому файлі та використовуватись загальним чином.
Якщо поле прихованого введення має дійсне значення, встановіть його як хеш 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 символом перехресної передачі ("#"), складається з додаткової довідкової інформації, яка повинна бути інтерпретована користувальницьким агентом після отримання. дія успішно завершена . Як такий, він не є частиною URI, але часто використовується спільно з URI.
(наголос додано)
Це тому, що браузер не передає цю частину серверу, вибачте.
Можливо, єдиний вибір - це прочитати його на стороні клієнта та перенести його вручну на сервер (GET / POST / AJAX). З повагою Артур
Ви також можете побачити, як грати з кнопкою "Назад" та історією браузера на "Малькан"
Просто, щоб виключити можливість, ви насправді не намагаєтеся побачити фрагмент на GET / POST, а насправді хочете знати, як отримати доступ до тієї частини об’єкта URI, який є у вас на коді на сервері, він знаходиться під Uri.Fragment ( Документи MSDN ).
Можливе рішення для 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");
}
}