2015-11-30 30 views
5

Ho un'applicazione a pagina singola - il che significa che tutto sul server viene reindirizzato a un singolo file index.html che esegue il sollevamento e il routing pesanti utilizzando l'API della cronologia HTML5 ().Instradamento in un'applicazione a pagina singola con un'altra pagina iniziale

Ora, voglio aggiungere una nuova pagina di destinazione al lato - chiamiamolo landing.html e voglio i clienti a raggiungere landing.html prima quando accedono / e index.html se accedono qualsiasi altro percorso.

Ora IE9 non supporta l'API di cronologia HTML5, quindi utilizzando "URL hash" percorsi come /books/authors diventano /#!/books/authors in esso. Poiché la sezione hash dell'URL is not sent to the server per quanto riguarda il server, tutti i percorsi sono / che significa che non è possibile instradare a landing.html o index.html in base a tale logica.

Ho pensato a un hack - URL reindirizzamento con / a landing.html, rilevando #! sul client, l'aggiunta di un cookie sul server (o client) chiamato notReallyHomePage e riorientare alla pagina corretta in base al cookie sul server . Questo è veramente hacky e non è una buona soluzione.

Quale sarebbe il modo corretto per gestire il routing in questo caso?

mio backend è in ASP.NET MVC, ma non credo che sia rilevante per la questione

+0

perché non utilizzare le funzionalità di routing fornite da ASP.NET MVC. – Antony

+0

@Antony perché non è così che funzionano le applicazioni a pagina singola. Il routing avviene sul lato client, quindi non è necessario colpire il server quando l'utente fa clic su un collegamento. Il vantaggio è che la maggior parte dei percorsi richiede solo JSON dal server (e non il markup) e altri possono ignorare del tutto il server. –

+2

Probabilmente vuoi qualcosa come una pagina indice/contenitore che abbia la tua logica di routing. Quella pagina viene caricata in partial a seconda della rotta scelta. Dal momento che le tue rotte non vengono inviate al server, non penso sia possibile caricare immediatamente la pagina corretta. – Cerbrus

risposta

0

Hmmmmm ... Qual è il contenuto di destinazione.html? Dal suo nome suppongo che sia una pagina piuttosto semplice.

Non si può avere il suo contenuto essere una parte di index.html e nasconderlo/mostrarlo secondo la logica del "primo utente"? Oppure se landing.html è una strana pagina creata dal tuo marketing o qualcosa del genere, quindi inseriscila in un iframe che nasconde/mostra secondo la stessa logica.

(ovviamente quando si mostra destinazione.html allora si nascondono index.html)

+0

No, metà del punto di avere la pagina di destinazione non è caricare index.html nella sua interezza. –

+0

Beh, in questo caso, sembra che la soluzione dei cookie sia il modo migliore per farlo. Come hai detto, chiamalo 'landingPageVisited' o qualcosa del genere e per impostazione predefinita '/' reindirizzerebbe all'atterraggio.html, a meno che il cookie non sia stato impostato su true. Non suona * that * hack-y :) –