19

Ho il seguente codice di reindirizzamento javascript seguito da un altro codice.Cosa succede al codice dopo un reindirizzamento javascript (impostazione window.location.href)?

window.location.href = '/someurl'; 
alert('hello'); 
alert('hello again'); 

Ciò provoca un'incoerenza del browser.

In firefox, il primo avviso è visibile per una frazione di secondo prima di essere reindirizzato. Il secondo avviso non è affatto visibile.

In chrome, vengono visualizzati entrambi gli avvisi e il reindirizzamento avviene solo dopo aver fatto clic su OK per entrambi gli avvisi.

C'è qualche concetto di cosa succede al codice dopo il reindirizzamento che può risolvere queste differenze? Se il reindirizzamento è asincrono, allora cosa sta facendo chrome? Mi piacerebbe capire cosa sta succedendo in modo da poter determinare cosa fare in uno scenario più complicato in cui un reindirizzamento è sepolto in profondità all'interno di alcuni callback e altra logica.

+1

Perché dovresti voler fare qualcosa dopo un reindirizzamento? – Musa

+0

Tutto dipenderà dal tempo - una volta che cambi la posizione non puoi fare affidamento su quanto tempo ci vorrà per elaborare/render/etc. –

+0

@Musa In realtà non voglio fare nulla dopo il reindirizzamento, motivo per cui questa domanda è venuta fuori. Ad esempio, se si suppone che il reindirizzamento si verifichi in una richiamata attivata dal codice di un'altra libreria, potrebbero esserci altre cose che vengono eseguite dalla libreria dopo che la libreria ha richiamato la mia richiamata. Ma se voglio semplicemente reindirizzare la pagina senza eseguire altre cose, potrei aver bisogno di fare qualcosa per impedirgli di continuare normalmente, a seconda di cosa stanno cercando di fare i browser. – user1385729

risposta

10

Il browser tenterà di eseguire il codice dopo window.location.href = 'url' fino a quando la pagina va al successivo indirizzo web, in modo che il numero di linee di codice che verranno eseguite dipende dalla velocità del browser

+0

Grazie, sembra plausibile. Sto provando a verificarlo aggiungendo un lungo ciclo di esecuzione dopo il reindirizzamento. Se fosse una questione di velocità, i browser non avrebbero semplicemente reindirizzato a punti casuali durante il ciclo? Sia chrome che firefox sembrano eseguire tutto il codice indipendentemente dal loop in esso contenuto (a meno che non ci sia un avviso nel loop, nel qual caso firefox va al reindirizzamento in quel punto). Non sono sicuro che il test del lungo ciclo sia il miglior test ... – user1385729

+0

Hai ragione. Forse non è la velocità, ma la priorità di ogni funzione javascript –

+0

@DaniloValente hai qualche risorsa per confermare questo –

16

La sessione Javascript lotterà continua la sua missione di fronte al destino imminente. La codifica in questo modo è considerata imprevedibile. ... e crudele.

+1

Penso che questa sia la migliore risposta. Il comportamento non è definito. – styfle

+1

+1000 per te signore. – Houssni

Problemi correlati