Sé que en el lado del cliente (javascript) puede usar windows.location.hash pero no puede encontrar de todos modos para acceder desde el lado del servidor.
Sé que en el lado del cliente (javascript) puede usar windows.location.hash pero no puede encontrar de todos modos para acceder desde el lado del servidor.
Respuestas:
Tuvimos una situación en la que necesitábamos persistir el hash de URL en las publicaciones posteriores de ASP.Net. Como el navegador no envía el hash al servidor de forma predeterminada, la única forma de hacerlo es usar Javascript:
Cuando se envíe el formulario, tome el hash ( window.location.hash
) y guárdelo en un campo de entrada oculto del lado del servidor. Póngalo en un DIV con una identificación de " urlhash
" para que podamos encontrarlo fácilmente más tarde.
En el servidor puede usar este valor si necesita hacer algo con él. Incluso puede cambiarlo si lo necesita.
Al cargar la página en el cliente , verifique el valor de este campo oculto. Querrá encontrarlo en el DIV en el que está contenido, ya que no se conocerá la ID generada automáticamente. Sí, podría hacer algunos trucos aquí con .ClientID, pero nos pareció más simple usar el contenedor DIV, ya que permite que todo este Javascript viva en un archivo externo y se use de manera genérica.
Si el campo de entrada oculto tiene un valor válido, configúrelo como el hash de URL ( window.location.hash again
) y / o realice otras acciones.
Usamos jQuery para simplificar la selección del campo, etc., en general, termina siendo unas pocas llamadas de jQuery, una para guardar el valor y otra para restaurarlo.
Antes de enviar:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
En la carga de la página:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
puede verificar " undefined
" u otras cosas que no desea manejar.
Además, asegúrese de usar $(document).ready()
adecuadamente, por supuesto.
RFC 2396 sección 4.1:
Cuando se usa una referencia de URI para realizar una acción de recuperación en el recurso identificado, el identificador de fragmento opcional, separado del URI por un carácter de rayado ("#"), consiste en información de referencia adicional que el agente de usuario debe interpretar después de la recuperación La acción se ha completado con éxito . Como tal, no es parte de un URI, pero a menudo se usa junto con un URI.
(énfasis añadido)
Eso es porque el navegador no transmite esa parte al servidor, lo siento.
Probablemente, la única opción es leerlo en el lado del cliente y transferirlo manualmente al servidor (GET / POST / AJAX). Saludos Artur
También puedes ver cómo jugar con el botón Atrás y el historial del navegador en Malcan
Solo para descartar la posibilidad de que en realidad no esté tratando de ver el fragmento en un GET / POST y realmente quiera saber cómo acceder a esa parte de un objeto URI que tiene dentro de su código del lado del servidor, está bajo Fragmento Uri. ( Documentos de MSDN ).
Posible solución para solicitudes GET:
Nuevo formato de enlace: http://example.com/yourDirectory?hash=video01
Llame a esta función hacia la parte superior del controlador o 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");
}
}