So che sul lato client (javascript) è possibile utilizzare windows.location.hash ma non è stato possibile trovare comunque l'accesso dal lato server.
So che sul lato client (javascript) è possibile utilizzare windows.location.hash ma non è stato possibile trovare comunque l'accesso dal lato server.
Risposte:
Abbiamo avuto una situazione in cui dovevamo persistere l'hash dell'URL attraverso i back-back di ASP.Net. Poiché il browser non invia l'hash al server per impostazione predefinita, l'unico modo per farlo è utilizzare un po 'di Javascript:
Quando il modulo si inoltra, prendi l'hash ( window.location.hash
) e memorizzalo in un campo di input nascosto sul lato server Metti questo in un DIV con un ID " urlhash
" in modo da poterlo trovare facilmente in seguito.
Sul server è possibile utilizzare questo valore se è necessario fare qualcosa con esso. Puoi anche cambiarlo se necessario.
Al caricamento della pagina sul client , controlla il valore di questo campo nascosto. Lo vorrai trovare dal DIV in cui è contenuto poiché l'ID generato automaticamente non sarà noto. Sì, potresti fare qualche trucco con .ClientID ma abbiamo trovato più semplice usare il DIV wrapper in quanto consente a tutto questo Javascript di vivere in un file esterno e di essere usato in modo generico.
Se il campo di input nascosto ha un valore valido, impostalo come hash URL ( window.location.hash again
) e / o esegui altre azioni.
Abbiamo usato jQuery per semplificare la selezione del campo, ecc ... tutto sommato si tratta di alcune chiamate jQuery, una per salvare il valore e un'altra per ripristinarlo.
Prima di inviare:
$("form").submit(function() {
$("input", "#urlhash").val(window.location.hash);
});
Caricamento a pagina:
var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
window.location.hash = hashVal;
}
IsHashValid()
può controllare " undefined
" o altre cose che non vuoi gestire.
Inoltre, assicurati di usarlo in modo $(document).ready()
appropriato, ovviamente.
RFC 2396 sezione 4.1:
Quando viene utilizzato un riferimento URI per eseguire un'azione di recupero sulla risorsa identificata, l'identificatore di frammento opzionale, separato dall'URI da un carattere di tratteggio ("#"), è costituito da ulteriori informazioni di riferimento che devono essere interpretate dall'agente utente dopo il recupero l'azione è stata completata con successo . Pertanto, non fa parte di un URI, ma viene spesso utilizzato insieme a un URI.
(enfasi aggiunta)
Questo perché il browser non trasmette quella parte al server, mi dispiace.
Probabilmente l'unica scelta è quella di leggerlo sul lato client e trasferirlo manualmente sul server (GET / POST / AJAX). Saluti Artur
Puoi anche vedere come giocare con il pulsante Indietro e la cronologia del browser su Malcan
Solo per escludere la possibilità che non si stia effettivamente cercando di vedere il frammento su un GET / POST e che si desideri effettivamente sapere come accedere a quella parte di un oggetto URI che si ha all'interno del proprio codice lato server, è sotto Uri.Fragment ( Documenti MSDN ).
Possibile soluzione per richieste GET:
Nuovo formato link: http://example.com/yourDirectory?hash=video01
Chiamare questa funzione verso la parte superiore del controller 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");
}
}